mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-12 01:37:40 +02:00
This commit replaces the previous dynamic, database-driven permissions system with a hardcoded, role-based access control (RBAC) structure. New files in `client/src/lib/permissions.ts` and `server/permissions.ts` define permissions per module and role, simplifying management and improving performance. Database tables related to roles, permissions, and user roles have been removed, and associated storage interface methods and routes have been deprecated or updated to reflect the new architecture. The `replit.md` file has also been updated to document these significant changes. Replit-Commit-Author: Agent Replit-Commit-Session-Id: a8a78c07-e900-425c-a577-5b4c5894379d Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/a8a78c07-e900-425c-a577-5b4c5894379d/7SnSmh4
149 lines
4.9 KiB
TypeScript
149 lines
4.9 KiB
TypeScript
// Système de permissions hardcodé par module
|
|
// Remplace l'ancien système flexible basé sur la base de données
|
|
|
|
export type Permission = 'view' | 'create' | 'edit' | 'delete' | 'validate';
|
|
export type Role = 'admin' | 'directeur' | 'manager' | 'employee';
|
|
export type Module =
|
|
| 'dashboard'
|
|
| 'calendar'
|
|
| 'orders'
|
|
| 'deliveries'
|
|
| 'reconciliation'
|
|
| 'publicity'
|
|
| 'customer-orders'
|
|
| 'dlc'
|
|
| 'tasks';
|
|
|
|
// Définition des permissions par module et par rôle
|
|
const PERMISSIONS: Record<Module, Record<Role, Permission[]>> = {
|
|
// Tableau de bord - tous les rôles peuvent le voir
|
|
dashboard: {
|
|
admin: ['view'],
|
|
directeur: ['view'],
|
|
manager: ['view'],
|
|
employee: ['view']
|
|
},
|
|
|
|
// Calendrier - Admin/Directeur tout, Manager tout sauf delete, Employé view
|
|
calendar: {
|
|
admin: ['view', 'create', 'edit', 'delete'],
|
|
directeur: ['view', 'create', 'edit', 'delete'],
|
|
manager: ['view', 'create', 'edit'],
|
|
employee: ['view']
|
|
},
|
|
|
|
// Commandes - Admin/Directeur tout, Manager tout sauf delete, Employé view
|
|
orders: {
|
|
admin: ['view', 'create', 'edit', 'delete'],
|
|
directeur: ['view', 'create', 'edit', 'delete'],
|
|
manager: ['view', 'create', 'edit'],
|
|
employee: ['view']
|
|
},
|
|
|
|
// Livraisons - Admin/Directeur tout, Manager tout sauf delete, Employé view
|
|
deliveries: {
|
|
admin: ['view', 'create', 'edit', 'delete'],
|
|
directeur: ['view', 'create', 'edit', 'delete'],
|
|
manager: ['view', 'create', 'edit'],
|
|
employee: ['view']
|
|
},
|
|
|
|
// Rapprochement - Admin tout, Directeur tout sauf delete, Manager/Employé rien
|
|
reconciliation: {
|
|
admin: ['view', 'create', 'edit', 'delete'],
|
|
directeur: ['view', 'create', 'edit'],
|
|
manager: [],
|
|
employee: []
|
|
},
|
|
|
|
// Publicité - Admin tout, autres view seulement
|
|
publicity: {
|
|
admin: ['view', 'create', 'edit', 'delete'],
|
|
directeur: ['view'],
|
|
manager: ['view'],
|
|
employee: ['view']
|
|
},
|
|
|
|
// Commandes client - Admin/Directeur tout, Manager tout sauf delete, Employé view + create
|
|
'customer-orders': {
|
|
admin: ['view', 'create', 'edit', 'delete'],
|
|
directeur: ['view', 'create', 'edit', 'delete'],
|
|
manager: ['view', 'create', 'edit'],
|
|
employee: ['view', 'create']
|
|
},
|
|
|
|
// DLC - Admin/Directeur tout, Manager tout sauf delete, Employé create + view
|
|
dlc: {
|
|
admin: ['view', 'create', 'edit', 'delete'],
|
|
directeur: ['view', 'create', 'edit', 'delete'],
|
|
manager: ['view', 'create', 'edit'],
|
|
employee: ['view', 'create']
|
|
},
|
|
|
|
// Tâches - Admin/Directeur tout, Manager view + validate, Employé view
|
|
tasks: {
|
|
admin: ['view', 'create', 'edit', 'delete', 'validate'],
|
|
directeur: ['view', 'create', 'edit', 'delete', 'validate'],
|
|
manager: ['view', 'validate'],
|
|
employee: ['view']
|
|
}
|
|
};
|
|
|
|
// Hook pour vérifier les permissions
|
|
export function usePermissions(userRole?: string) {
|
|
const role = userRole?.toLowerCase() as Role;
|
|
|
|
// Vérifie si l'utilisateur peut accéder à un module
|
|
const canAccessModule = (module: Module): boolean => {
|
|
if (!role || !PERMISSIONS[module]) return false;
|
|
const permissions = PERMISSIONS[module][role] || [];
|
|
return permissions.length > 0;
|
|
};
|
|
|
|
// Vérifie si l'utilisateur peut effectuer une action sur un module
|
|
const canPerformAction = (module: Module, action: Permission): boolean => {
|
|
if (!role || !PERMISSIONS[module]) return false;
|
|
const permissions = PERMISSIONS[module][role] || [];
|
|
return permissions.includes(action);
|
|
};
|
|
|
|
// Retourne toutes les permissions pour un module
|
|
const getModulePermissions = (module: Module): Permission[] => {
|
|
if (!role || !PERMISSIONS[module]) return [];
|
|
return PERMISSIONS[module][role] || [];
|
|
};
|
|
|
|
// Vérifie si l'utilisateur peut voir le module (a au moins une permission)
|
|
const canView = (module: Module): boolean => canPerformAction(module, 'view');
|
|
const canCreate = (module: Module): boolean => canPerformAction(module, 'create');
|
|
const canEdit = (module: Module): boolean => canPerformAction(module, 'edit');
|
|
const canDelete = (module: Module): boolean => canPerformAction(module, 'delete');
|
|
const canValidate = (module: Module): boolean => canPerformAction(module, 'validate');
|
|
|
|
return {
|
|
canAccessModule,
|
|
canPerformAction,
|
|
getModulePermissions,
|
|
canView,
|
|
canCreate,
|
|
canEdit,
|
|
canDelete,
|
|
canValidate
|
|
};
|
|
}
|
|
|
|
// Fonction utilitaire pour les middlewares serveur
|
|
export function hasPermission(userRole: string, module: Module, action: Permission): boolean {
|
|
const role = userRole?.toLowerCase() as Role;
|
|
if (!role || !PERMISSIONS[module]) return false;
|
|
const permissions = PERMISSIONS[module][role] || [];
|
|
return permissions.includes(action);
|
|
}
|
|
|
|
// Fonction utilitaire pour vérifier l'accès à un module
|
|
export function hasModuleAccess(userRole: string, module: Module): boolean {
|
|
const role = userRole?.toLowerCase() as Role;
|
|
if (!role || !PERMISSIONS[module]) return false;
|
|
const permissions = PERMISSIONS[module][role] || [];
|
|
return permissions.length > 0;
|
|
} |