Files
LogiFlow/shared/permissions.ts
T
michaelschal 072ad60ec1 Grant employees access to system features and tasks
Adjust permissions for employee role to access tasks and supplier data, and allow directors to validate DLC products.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: b163d4c0-de5e-4f4e-a9c0-aed4c7049718
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/b163d4c0-de5e-4f4e-a9c0-aed4c7049718/69xEJ3P
2025-08-12 08:56:22 +00:00

149 lines
5.0 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é aucun accès
orders: {
admin: ['view', 'create', 'edit', 'delete'],
directeur: ['view', 'create', 'edit', 'delete'],
manager: ['view', 'create', 'edit'],
employee: []
},
// Livraisons - Admin/Directeur tout, Manager tout sauf delete, Employé aucun accès
deliveries: {
admin: ['view', 'create', 'edit', 'delete'],
directeur: ['view', 'create', 'edit', 'delete'],
manager: ['view', 'create', 'edit'],
employee: []
},
// 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 + create
tasks: {
admin: ['view', 'create', 'edit', 'delete', 'validate'],
directeur: ['view', 'create', 'edit', 'delete', 'validate'],
manager: ['view', 'validate'],
employee: ['view', 'create']
}
};
// 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;
}