320 lines
9.3 KiB
Dart
320 lines
9.3 KiB
Dart
/// 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<String> 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<String> getEffectivePermissions() {
|
|
final effective = <String>{};
|
|
|
|
// 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<UserRole> getSubordinateRoles() {
|
|
return UserRole.values.where((role) => role.level < level).toList();
|
|
}
|
|
|
|
/// Obtient tous les rôles avec un niveau supérieur ou égal
|
|
List<UserRole> 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<String> _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<String> _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<String> _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<String> _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<String> _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<String> _visitorPermissions = [
|
|
// Événements publics uniquement
|
|
PermissionMatrix.EVENTS_VIEW_PUBLIC,
|
|
];
|