import { useSearchParams } from 'react-router'; import { useAuthStore } from '../../../auth/auth-store'; import { DashboardTab } from './DashboardTab'; import { UsersTab } from './UsersTab'; import { GroupsTab } from './GroupsTab'; import { RolesTab } from './RolesTab'; import styles from './RbacPage.module.css'; const TABS = ['dashboard', 'users', 'groups', 'roles'] as const; type TabKey = (typeof TABS)[number]; const TAB_LABELS: Record = { dashboard: 'Dashboard', users: 'Users', groups: 'Groups', roles: 'Roles', }; export function RbacPage() { const roles = useAuthStore((s) => s.roles); if (!roles.includes('ADMIN')) { return (
Access Denied — this page requires the ADMIN role.
); } return ; } function RbacContent() { const [searchParams, setSearchParams] = useSearchParams(); const rawTab = searchParams.get('tab'); const activeTab: TabKey = TABS.includes(rawTab as TabKey) ? (rawTab as TabKey) : 'dashboard'; function setTab(tab: TabKey) { setSearchParams({ tab }, { replace: true }); } return (
{TABS.map((tab) => ( ))}
{activeTab === 'dashboard' && } {activeTab === 'users' && } {activeTab === 'groups' && } {activeTab === 'roles' && }
); }