/** * Hiérarchie des rôles côté front. Doit rester synchronisée avec * `role_hierarchy` dans config/packages/security.yaml côté back. * * Pour ajouter un nouveau rôle : * 1. Ajouter une entrée ici (son rôle parent dans la chaîne) * 2. Ajouter `ROLE_X: ROLE_Y` dans security.yaml côté back * 3. Ajouter le rôle dans `ROLE` (utils/constants.ts) pour le form admin */ export const ROLE_HIERARCHY: Record = { ROLE_ADMIN: ['ROLE_BUREAU'], ROLE_BUREAU: ['ROLE_USER'], ROLE_USER: [] } /** * Retourne l'ensemble des rôles effectifs en expansant la hiérarchie. * Ex : ['ROLE_ADMIN'] → Set { 'ROLE_ADMIN', 'ROLE_BUREAU', 'ROLE_USER' }. */ export const expandRoles = (roles: string[]): Set => { const expanded = new Set(roles) const visit = (role: string): void => { const parents = ROLE_HIERARCHY[role] ?? [] for (const parent of parents) { if (!expanded.has(parent)) { expanded.add(parent) visit(parent) } } } for (const r of roles) visit(r) return expanded } export const userHasRole = (userRoles: string[] | null | undefined, role: string): boolean => { if (!userRoles || userRoles.length === 0) return false return expandRoles(userRoles).has(role) }