'use client'; import { useState, useEffect } from 'react'; interface UserRoles { roles: string[]; hasRole: (role: string) => boolean; hasAnyRole: (roles: string[]) => boolean; canAccess: (requiredRoles: string[]) => boolean; isLoading: boolean; } export const useUserRoles = (): UserRoles => { const [roles, setRoles] = useState([]); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const loadUserRoles = () => { try { // Récupérer les rôles depuis le token stocké const accessToken = localStorage.getItem('accessToken'); if (accessToken) { // Décoder le token JWT pour extraire les rôles const payload = JSON.parse(atob(accessToken.split('.')[1])); // Extraire les rôles du realm et du client const realmRoles = payload.realm_access?.roles || []; const clientRoles = payload.resource_access?.['btpxpress-frontend']?.roles || []; const allRoles = [...realmRoles, ...clientRoles]; setRoles(allRoles); console.log('🔐 Rôles utilisateur chargés:', allRoles); } else { console.warn('⚠️ Aucun token d\'accès trouvé'); setRoles([]); } } catch (error) { console.error('❌ Erreur lors du chargement des rôles:', error); setRoles([]); } finally { setIsLoading(false); } }; loadUserRoles(); }, []); const hasRole = (role: string): boolean => { return roles.includes(role); }; const hasAnyRole = (requiredRoles: string[]): boolean => { return requiredRoles.some(role => roles.includes(role)); }; const canAccess = (requiredRoles: string[]): boolean => { if (requiredRoles.length === 0) return true; return hasAnyRole(requiredRoles); }; return { roles, hasRole, hasAnyRole, canAccess, isLoading }; }; // Configuration des rôles par page/fonctionnalité export const PAGE_ROLES = { DASHBOARD: [], // Accessible à tous les utilisateurs authentifiés PLANNING: ['super_admin', 'admin', 'directeur', 'manager', 'chef_chantier'], CHANTIERS: ['super_admin', 'admin', 'directeur', 'manager', 'chef_chantier', 'ouvrier'], CLIENTS: ['super_admin', 'admin', 'directeur', 'commercial'], DEVIS: ['super_admin', 'admin', 'directeur', 'commercial'], FACTURES: ['super_admin', 'admin', 'directeur', 'comptable'], MATERIELS: ['super_admin', 'admin', 'directeur', 'manager', 'logisticien'], EMPLOYES: ['super_admin', 'admin', 'directeur', 'manager'], EQUIPES: ['super_admin', 'admin', 'directeur', 'manager', 'chef_chantier'], REPORTS: ['super_admin', 'admin', 'directeur', 'manager'], ADMIN: ['super_admin', 'admin'] } as const; export type PageRole = keyof typeof PAGE_ROLES;