Ouvre POST/PATCH /gestionnaires et POST /users/admin aux administrateurs (en plus du super_admin). Garde-fou front : pas de création staff sur le dashboard gestionnaire.
60 lines
1.9 KiB
Dart
60 lines
1.9 KiB
Dart
/// Création comptes staff (gestionnaire / admin) — ticket #161.
|
||
bool canCreateStaffAccounts(String? role) {
|
||
final r = (role ?? '').trim().toLowerCase();
|
||
return r == 'administrateur' || r == 'super_admin';
|
||
}
|
||
|
||
/// Droits d’affichage poubelle — tickets #154 / #160.
|
||
bool canDeleteMetier(String? role) {
|
||
final r = (role ?? '').trim().toLowerCase();
|
||
return r == 'gestionnaire' ||
|
||
r == 'administrateur' ||
|
||
r == 'super_admin';
|
||
}
|
||
|
||
bool canDeleteGestionnaire(String? role) {
|
||
final r = (role ?? '').trim().toLowerCase();
|
||
return r == 'administrateur' || r == 'super_admin';
|
||
}
|
||
|
||
bool canDeleteAdministrateur({
|
||
required String? currentRole,
|
||
required String? currentUserId,
|
||
required String targetUserId,
|
||
required String targetRole,
|
||
required int adminCount,
|
||
}) {
|
||
final me = (currentRole ?? '').trim().toLowerCase();
|
||
if (me != 'administrateur' && me != 'super_admin') return false;
|
||
if (targetUserId.trim().isEmpty) return false;
|
||
if (currentUserId != null &&
|
||
currentUserId.trim() == targetUserId.trim()) {
|
||
return false;
|
||
}
|
||
final target = targetRole.trim().toLowerCase();
|
||
if (target == 'super_admin') return false;
|
||
if (adminCount <= 1 && me != 'super_admin') return false;
|
||
return true;
|
||
}
|
||
|
||
String? adminDeleteBlockedReason({
|
||
required String? currentRole,
|
||
required String? currentUserId,
|
||
required String targetUserId,
|
||
required String targetRole,
|
||
required int adminCount,
|
||
}) {
|
||
if (currentUserId != null &&
|
||
currentUserId.trim() == targetUserId.trim()) {
|
||
return 'Vous ne pouvez pas supprimer votre propre compte.';
|
||
}
|
||
if (targetRole.trim().toLowerCase() == 'super_admin') {
|
||
return 'Le super administrateur ne peut pas être supprimé.';
|
||
}
|
||
if (adminCount <= 1 &&
|
||
(currentRole ?? '').trim().toLowerCase() != 'super_admin') {
|
||
return 'Seul un super administrateur peut supprimer le dernier administrateur.';
|
||
}
|
||
return null;
|
||
}
|