import Dialog from '~/components/Dialog'; import Link from '~/components/Link'; import Notice from '~/components/Notice'; import RadioGroup from '~/components/RadioGroup'; import { Roles } from '~/server/web/roles'; import { User } from '~/types'; interface ReassignProps { user: User & { headplaneRole: string }; isOpen: boolean; setIsOpen: (isOpen: boolean) => void; } export default function ReassignUser({ user, isOpen, setIsOpen, }: ReassignProps) { return ( Change role for {user.name}? Most roles are carried straight from Tailscale. However, keep in mind that I have not fully implemented permissions yet and some things may be accessible to everyone. The only fully completed role is Member.{' '} Learn More {user.headplaneRole === 'owner' ? ( The Tailnet owner cannot be reassigned. ) : ( <> {Object.keys(Roles) .filter((role) => role !== 'owner') .map((role) => { const { name, desc } = mapRoleToName(role); return (

{name}

{desc}

); })}
)}
); } function mapRoleToName(role: string) { switch (role) { case 'admin': return { name: 'Admin', desc: 'Can view the admin console, manage network, machine, and user settings.', }; case 'network_admin': return { name: 'Network Admin', desc: 'Can view the admin console and manage ACLs and network settings. Cannot manage machines or users.', }; case 'it_admin': return { name: 'IT Admin', desc: 'Can view the admin console and manage machines and users. Cannot manage ACLs or network settings.', }; case 'auditor': return { name: 'Auditor', desc: 'Can view the admin console.', }; case 'member': return { name: 'Member', desc: 'Cannot view the admin console.', }; default: return { name: 'Unknown', desc: 'Unknown', }; } }