/// Système de rôles utilisateurs avec hiérarchie intelligente /// 6 niveaux de rôles avec permissions héritées et contextuelles library user_role; import 'permission_matrix.dart'; /// Énumération des rôles utilisateurs avec hiérarchie et permissions /// /// Chaque rôle a un niveau numérique pour faciliter les comparaisons /// et une liste de permissions spécifiques avec héritage intelligent enum UserRole { /// Super Administrateur - Niveau système (100) /// Accès complet à toutes les fonctionnalités multi-organisations superAdmin( level: 100, displayName: 'Super Administrateur', description: 'Accès complet système et multi-organisations', color: 0xFF6C5CE7, // Violet sophistiqué permissions: _superAdminPermissions, ), /// Administrateur d'Organisation - Niveau organisation (80) /// Gestion complète de son organisation uniquement orgAdmin( level: 80, displayName: 'Administrateur', description: 'Gestion complète de l\'organisation', color: 0xFF0984E3, // Bleu corporate permissions: _orgAdminPermissions, ), /// Modérateur/Gestionnaire - Niveau intermédiaire (60) /// Gestion partielle selon permissions accordées moderator( level: 60, displayName: 'Modérateur', description: 'Gestion partielle et modération', color: 0xFFE17055, // Orange focus permissions: _moderatorPermissions, ), /// Membre Actif - Niveau utilisateur (40) /// Accès aux fonctionnalités membres avec participation active activeMember( level: 40, displayName: 'Membre Actif', description: 'Participation active aux activités', color: 0xFF00B894, // Vert communauté permissions: _activeMemberPermissions, ), /// Membre Simple - Niveau basique (20) /// Accès limité aux informations personnelles simpleMember( level: 20, displayName: 'Membre', description: 'Accès aux informations de base', color: 0xFF00CEC9, // Teal simple permissions: _simpleMemberPermissions, ), /// Visiteur/Invité - Niveau public (0) /// Accès aux informations publiques uniquement visitor( level: 0, displayName: 'Visiteur', description: 'Accès aux informations publiques', color: 0xFF6C5CE7, // Indigo accueillant permissions: _visitorPermissions, ); /// Constructeur du rôle avec toutes ses propriétés const UserRole({ required this.level, required this.displayName, required this.description, required this.color, required this.permissions, }); /// Niveau numérique du rôle (0-100) final int level; /// Nom d'affichage du rôle final String displayName; /// Description détaillée du rôle final String description; /// Couleur thématique du rôle (format 0xFFRRGGBB) final int color; /// Liste des permissions spécifiques au rôle final List permissions; /// Vérifie si ce rôle a un niveau supérieur ou égal à un autre bool hasLevelOrAbove(UserRole other) => level >= other.level; /// Vérifie si ce rôle a un niveau strictement supérieur à un autre bool hasLevelAbove(UserRole other) => level > other.level; /// Vérifie si ce rôle possède une permission spécifique bool hasPermission(String permission) { // Vérification directe if (permissions.contains(permission)) return true; // Vérification par héritage (permissions impliquées) return permissions.any((p) => PermissionMatrix.implies(p, permission)); } /// Obtient toutes les permissions effectives (directes + héritées) List getEffectivePermissions() { final effective = {}; // Ajouter les permissions directes effective.addAll(permissions); // Ajouter les permissions impliquées for (final permission in permissions) { for (final allPermission in PermissionMatrix.ALL_PERMISSIONS) { if (PermissionMatrix.implies(permission, allPermission)) { effective.add(allPermission); } } } return effective.toList()..sort(); } /// Vérifie si ce rôle peut effectuer une action sur un domaine bool canPerformAction(String domain, String action, {String scope = 'own'}) { final permission = '$domain.$action.$scope'; return hasPermission(permission); } /// Obtient le rôle à partir de son nom static UserRole? fromString(String roleName) { return UserRole.values.firstWhere( (role) => role.name == roleName, orElse: () => UserRole.visitor, ); } /// Obtient tous les rôles avec un niveau inférieur ou égal List getSubordinateRoles() { return UserRole.values.where((role) => role.level < level).toList(); } /// Obtient tous les rôles avec un niveau supérieur ou égal List getSuperiorRoles() { return UserRole.values.where((role) => role.level >= level).toList(); } } // === DÉFINITIONS DES PERMISSIONS PAR RÔLE === /// Permissions du Super Administrateur (accès complet) const List _superAdminPermissions = [ // Toutes les permissions système PermissionMatrix.SYSTEM_ADMIN, PermissionMatrix.SYSTEM_CONFIG, PermissionMatrix.SYSTEM_MONITORING, PermissionMatrix.SYSTEM_BACKUP, PermissionMatrix.SYSTEM_SECURITY, PermissionMatrix.SYSTEM_AUDIT, PermissionMatrix.SYSTEM_LOGS, PermissionMatrix.SYSTEM_MAINTENANCE, // Gestion globale des organisations PermissionMatrix.ORG_CREATE, PermissionMatrix.ORG_DELETE, PermissionMatrix.ORG_CONFIG, // Accès complet aux dashboards PermissionMatrix.DASHBOARD_ADMIN, PermissionMatrix.DASHBOARD_ANALYTICS, PermissionMatrix.DASHBOARD_REPORTS, PermissionMatrix.DASHBOARD_EXPORT, // Gestion complète des membres PermissionMatrix.MEMBERS_VIEW_ALL, PermissionMatrix.MEMBERS_EDIT_ALL, PermissionMatrix.MEMBERS_DELETE, PermissionMatrix.MEMBERS_EXPORT, PermissionMatrix.MEMBERS_IMPORT, // Accès complet aux finances PermissionMatrix.FINANCES_VIEW_ALL, PermissionMatrix.FINANCES_MANAGE, PermissionMatrix.FINANCES_AUDIT, // Tous les rapports PermissionMatrix.REPORTS_VIEW_ALL, PermissionMatrix.REPORTS_GENERATE, PermissionMatrix.REPORTS_EXPORT, PermissionMatrix.REPORTS_SCHEDULE, ]; /// Permissions de l'Administrateur d'Organisation const List _orgAdminPermissions = [ // Configuration organisation PermissionMatrix.ORG_CONFIG, PermissionMatrix.ORG_BRANDING, PermissionMatrix.ORG_SETTINGS, PermissionMatrix.ORG_PERMISSIONS, PermissionMatrix.ORG_WORKFLOWS, // Dashboard organisation PermissionMatrix.DASHBOARD_VIEW, PermissionMatrix.DASHBOARD_ANALYTICS, PermissionMatrix.DASHBOARD_REPORTS, PermissionMatrix.DASHBOARD_CUSTOMIZE, // Gestion des membres PermissionMatrix.MEMBERS_VIEW_ALL, PermissionMatrix.MEMBERS_CREATE, PermissionMatrix.MEMBERS_EDIT_ALL, PermissionMatrix.MEMBERS_APPROVE, PermissionMatrix.MEMBERS_SUSPEND, PermissionMatrix.MEMBERS_COMMUNICATE, // Gestion financière PermissionMatrix.FINANCES_VIEW_ALL, PermissionMatrix.FINANCES_MANAGE, PermissionMatrix.FINANCES_REPORTS, PermissionMatrix.FINANCES_BUDGET, // Gestion des événements PermissionMatrix.EVENTS_VIEW_ALL, PermissionMatrix.EVENTS_CREATE, PermissionMatrix.EVENTS_EDIT_ALL, PermissionMatrix.EVENTS_DELETE, PermissionMatrix.EVENTS_ANALYTICS, // Gestion de la solidarité PermissionMatrix.SOLIDARITY_VIEW_ALL, PermissionMatrix.SOLIDARITY_APPROVE, PermissionMatrix.SOLIDARITY_MANAGE, PermissionMatrix.SOLIDARITY_FUND, // Communication PermissionMatrix.COMM_SEND_ALL, PermissionMatrix.COMM_BROADCAST, PermissionMatrix.COMM_TEMPLATES, // Rapports organisation PermissionMatrix.REPORTS_GENERATE, PermissionMatrix.REPORTS_EXPORT, ]; /// Permissions du Modérateur const List _moderatorPermissions = [ // Dashboard limité PermissionMatrix.DASHBOARD_VIEW, // Modération des membres PermissionMatrix.MEMBERS_VIEW_ALL, PermissionMatrix.MEMBERS_APPROVE, PermissionMatrix.MODERATION_USERS, // Modération du contenu PermissionMatrix.MODERATION_CONTENT, PermissionMatrix.MODERATION_REPORTS, // Événements limités PermissionMatrix.EVENTS_VIEW_ALL, PermissionMatrix.EVENTS_MODERATE, // Communication modérée PermissionMatrix.COMM_MODERATE, PermissionMatrix.COMM_SEND_MEMBERS, ]; /// Permissions du Membre Actif const List _activeMemberPermissions = [ // Dashboard personnel PermissionMatrix.DASHBOARD_VIEW, // Profil personnel PermissionMatrix.MEMBERS_VIEW_OWN, PermissionMatrix.MEMBERS_EDIT_OWN, // Finances personnelles PermissionMatrix.FINANCES_VIEW_OWN, // Événements PermissionMatrix.EVENTS_VIEW_ALL, PermissionMatrix.EVENTS_CREATE, PermissionMatrix.EVENTS_EDIT_OWN, // Solidarité PermissionMatrix.SOLIDARITY_VIEW_ALL, PermissionMatrix.SOLIDARITY_CREATE, ]; /// Permissions du Membre Simple const List _simpleMemberPermissions = [ // Dashboard basique PermissionMatrix.DASHBOARD_VIEW, // Profil personnel uniquement PermissionMatrix.MEMBERS_VIEW_OWN, PermissionMatrix.MEMBERS_EDIT_OWN, // Finances personnelles PermissionMatrix.FINANCES_VIEW_OWN, // Événements publics PermissionMatrix.EVENTS_VIEW_PUBLIC, // Solidarité consultation PermissionMatrix.SOLIDARITY_VIEW_OWN, ]; /// Permissions du Visiteur const List _visitorPermissions = [ // Événements publics uniquement PermissionMatrix.EVENTS_VIEW_PUBLIC, ];