/** * Role-based Access System for Admin v2 * * Roles determine which categories and modules are visible */ import { CategoryId } from './navigation' export type RoleId = 'developer' | 'manager' | 'auditor' | 'dsb' export interface Role { id: RoleId name: string description: string icon: string visibleCategories: CategoryId[] color: string } export const roles: Role[] = [ { id: 'developer', name: 'Entwickler', description: 'Voller Zugriff auf alle Bereiche', icon: 'code', visibleCategories: ['communication', 'ai', 'education', 'website'], color: 'bg-primary-100 border-primary-300 text-primary-700', }, { id: 'manager', name: 'Manager', description: 'Executive Uebersicht', icon: 'chart', visibleCategories: ['communication', 'website'], color: 'bg-blue-100 border-blue-300 text-blue-700', }, { id: 'auditor', name: 'Auditor', description: 'Compliance Pruefung', icon: 'clipboard', visibleCategories: ['communication'], color: 'bg-amber-100 border-amber-300 text-amber-700', }, { id: 'dsb', name: 'DSB', description: 'Datenschutzbeauftragter', icon: 'shield', visibleCategories: ['communication'], color: 'bg-purple-100 border-purple-300 text-purple-700', }, ] // Storage key for localStorage const ROLE_STORAGE_KEY = 'admin-v2-selected-role' // Get role by ID export function getRoleById(id: RoleId): Role | undefined { return roles.find(role => role.id === id) } // Check if category is visible for a role export function isCategoryVisibleForRole(categoryId: CategoryId, roleId: RoleId): boolean { const role = getRoleById(roleId) return role ? role.visibleCategories.includes(categoryId) : false } // Get stored role from localStorage (client-side only) export function getStoredRole(): RoleId | null { if (typeof window === 'undefined') return null const stored = localStorage.getItem(ROLE_STORAGE_KEY) if (stored && roles.some(r => r.id === stored)) { return stored as RoleId } return null } // Store role in localStorage export function storeRole(roleId: RoleId): void { if (typeof window === 'undefined') return localStorage.setItem(ROLE_STORAGE_KEY, roleId) } // Clear stored role export function clearStoredRole(): void { if (typeof window === 'undefined') return localStorage.removeItem(ROLE_STORAGE_KEY) } // Check if this is a first-time visitor (no role stored) export function isFirstTimeVisitor(): boolean { return getStoredRole() === null } // Get visible categories for a role export function getVisibleCategoriesForRole(roleId: RoleId): CategoryId[] { const role = getRoleById(roleId) return role ? role.visibleCategories : [] }