import 'package:flutter/foundation.dart'; enum Permission { // Permissions liées aux prestations viewAllEvents, // Voir toutes les prestations viewAssignedEvents, // Voir uniquement les prestations assignées editEvents, // Modifier les prestations deleteEvents, // Supprimer les prestations assignCrew, // Assigner des membres d'équipe aux prestations // Permissions liées aux finances viewPrices, // Voir les prix editPrices, // Modifier les prix viewQuotes, // Voir les devis createQuotes, // Créer des devis editQuotes, // Modifier les devis viewInvoices, // Voir les factures createInvoices, // Créer des factures editInvoices, // Modifier les factures // Permissions liées aux utilisateurs viewUsers, // Voir les utilisateurs editUsers, // Modifier les utilisateurs deleteUsers, // Supprimer les utilisateurs // Permissions liées aux clients viewClients, // Voir les clients editClients, // Modifier les clients deleteClients, // Supprimer les clients } class Role { final String name; final Set permissions; const Role({ required this.name, required this.permissions, }); bool hasPermission(Permission permission) => permissions.contains(permission); bool hasAllPermissions(List requiredPermissions) { return requiredPermissions .every((permission) => permissions.contains(permission)); } bool hasAnyPermission(List requiredPermissions) { return requiredPermissions .any((permission) => permissions.contains(permission)); } } class Roles { static const admin = Role( name: 'ADMIN', permissions: { // Toutes les permissions pour l'administrateur Permission.viewAllEvents, Permission.viewAssignedEvents, Permission.editEvents, Permission.deleteEvents, Permission.assignCrew, Permission.viewPrices, Permission.editPrices, Permission.viewQuotes, Permission.createQuotes, Permission.editQuotes, Permission.viewInvoices, Permission.createInvoices, Permission.editInvoices, Permission.viewUsers, Permission.editUsers, Permission.deleteUsers, Permission.viewClients, Permission.editClients, Permission.deleteClients, }, ); static const crew = Role( name: 'CREW', permissions: { // Permissions limitées pour l'équipe Permission.viewAssignedEvents, Permission.viewClients, }, ); static Role fromString(String roleName) { switch (roleName.toUpperCase()) { case 'ADMIN': return admin; case 'CREW': return crew; default: return crew; // Par défaut, on donne les permissions minimales } } static List values = [admin, crew]; }