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 type { Role } from "~/server/web/roles"; interface ReassignProps { userId: string; displayName: string; role: Role; isOpen: boolean; setIsOpen: (isOpen: boolean) => void; } export default function ReassignUser({ userId, displayName, role, isOpen, setIsOpen, }: ReassignProps) { return ( Change role for {displayName}? Roles control what the user can access in Headplane. Each role grants a specific set of capabilities.{" "} Learn More {role === "owner" ? ( The Tailnet owner cannot be reassigned. ) : ( <> {Object.keys(Roles) .filter((r) => r !== "owner") .map((r) => { const { name, desc } = mapRoleToName(r); 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 "viewer": return { name: "Viewer", desc: "Can view machines, users, and generate their own auth keys.", }; case "member": return { name: "Member", desc: "Cannot view the admin console.", }; default: return { name: role, desc: "No description available.", }; } }