Added few configurations & mores
This commit is contained in:
88
lib/permissions.ts
Normal file
88
lib/permissions.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
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<boolean> {
|
||||
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<string[]> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user