import { prisma } from './prisma'; import { AVAILABLE_PAGES } from './pages'; /** * Vérifie si un utilisateur a accès à une page donnée */ export async function hasPageAccess(userId: string, pageRoute: string): Promise { try { // La page Paramètres est toujours accessible à tous les utilisateurs if (pageRoute === '/dashboard/parametres') { return true; } const user = await prisma.user.findUnique({ where: { id: userId }, include: { role: { include: { permissions: { include: { permission: true, }, }, }, }, }, }); // Si l'utilisateur n'a pas de rôle, permettre l'accès à toutes les pages // (pour permettre la transition et la configuration initiale) if (!user || !user.role) { return true; } // Vérifier si le rôle a la permission pour cette page const hasPermission = user.role.permissions.some( (rp) => rp.permission.name === pageRoute ); return hasPermission; } catch (error) { console.error('Erreur lors de la vérification des permissions:', error); // En cas d'erreur, permettre l'accès pour éviter de bloquer l'utilisateur return true; } } /** * Récupère toutes les pages accessibles pour un utilisateur */ export async function getUserAccessiblePages(userId: string): Promise { try { const user = await prisma.user.findUnique({ where: { id: userId }, include: { role: { include: { permissions: { include: { permission: true, }, }, }, }, }, }); // Si l'utilisateur n'a pas de rôle, retourner toutes les pages disponibles // (pour permettre la transition et la configuration initiale) if (!user || !user.role) { return AVAILABLE_PAGES.map(page => page.route); } // La page Paramètres est toujours accessible const pages: string[] = ['/dashboard/parametres']; // Ajouter les pages accessibles via le rôle const rolePages = user.role.permissions .map((rp) => rp.permission.name) .filter((route) => AVAILABLE_PAGES.some((page) => page.route === route)); return [...pages, ...rolePages]; } catch (error) { console.error('Erreur lors de la récupération des pages accessibles:', error); // En cas d'erreur, retourner toutes les pages pour éviter de bloquer l'utilisateur return AVAILABLE_PAGES.map(page => page.route); } }