Refactoring

This commit is contained in:
dahoud
2026-03-01 22:00:28 +00:00
parent c0e2c4da45
commit 6b28cf751e
469 changed files with 26866 additions and 14768 deletions

View File

@@ -5,39 +5,133 @@ import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
/**
* Service de vérification des permissions utilisateur
*
* SÉCURITÉ:
* - Support des rôles multiples
* - Hiérarchie de permissions (SUPER_ADMIN > ADMIN > GESTIONNAIRE > MEMBER)
* - Vérification granulaire par fonctionnalité
*
* @author UnionFlow Team
* @version 2.0
*/
@Named("permissionChecker")
@RequestScoped
public class PermissionChecker implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private UserSession userSession;
// Vérifications basées sur le rôle utilisateur
// Hiérarchie des rôles (de plus privilégié à moins privilégié)
private static final List<String> ROLE_HIERARCHY = Arrays.asList(
"SUPER_ADMIN",
"ADMIN_ENTITE",
"ADMIN",
"GESTIONNAIRE_MEMBRE",
"GESTIONNAIRE_EVENEMENT",
"GESTIONNAIRE_AIDE",
"GESTIONNAIRE_FINANCE",
"TRESORIER",
"MEMBRE",
"MEMBER"
);
/**
* Vérifie si l'utilisateur possède un rôle spécifique
* SÉCURITÉ: Support des rôles multiples
*/
public boolean hasRole(String role) {
if (userSession == null || !userSession.isAuthenticated()) {
return false;
}
String userRole = userSession.getRole();
return role.equals(userRole);
List<String> userRoles = userSession.getRoles();
if (userRoles == null || userRoles.isEmpty()) {
return false;
}
return userRoles.contains(role);
}
/**
* Vérifie si l'utilisateur possède au moins un des rôles spécifiés
* SÉCURITÉ: Support des rôles multiples
*/
public boolean hasAnyRole(String... roles) {
if (userSession == null || !userSession.isAuthenticated()) {
return false;
}
String userRole = userSession.getRole();
List<String> userRoles = userSession.getRoles();
if (userRoles == null || userRoles.isEmpty()) {
return false;
}
for (String role : roles) {
if (role.equals(userRole)) {
if (userRoles.contains(role)) {
return true;
}
}
return false;
}
/**
* Vérifie si l'utilisateur possède TOUS les rôles spécifiés
* SÉCURITÉ: Vérification stricte pour permissions combinées
*/
public boolean hasAllRoles(String... roles) {
if (userSession == null || !userSession.isAuthenticated()) {
return false;
}
List<String> userRoles = userSession.getRoles();
if (userRoles == null || userRoles.isEmpty()) {
return false;
}
for (String role : roles) {
if (!userRoles.contains(role)) {
return false;
}
}
return true;
}
/**
* Vérifie si l'utilisateur a un niveau de privilège au moins égal au rôle spécifié
* SÉCURITÉ: Hiérarchie de rôles (SUPER_ADMIN peut tout faire)
*/
public boolean hasRoleOrHigher(String role) {
if (userSession == null || !userSession.isAuthenticated()) {
return false;
}
List<String> userRoles = userSession.getRoles();
if (userRoles == null || userRoles.isEmpty()) {
return false;
}
int requiredLevel = ROLE_HIERARCHY.indexOf(role);
if (requiredLevel == -1) {
return false; // Rôle inconnu
}
// Vérifier si l'utilisateur a un rôle de niveau égal ou supérieur
for (String userRole : userRoles) {
int userLevel = ROLE_HIERARCHY.indexOf(userRole);
if (userLevel != -1 && userLevel <= requiredLevel) {
return true; // Niveau supérieur ou égal trouvé
}
}
return false;
}
// Vérifications basées sur les permissions
public boolean canManageMembers() {
@@ -191,22 +285,45 @@ public class PermissionChecker implements Serializable {
if (!userSession.isAuthenticated()) {
return "guest-mode";
}
String role = userSession.getRole();
switch (role) {
case "SUPER_ADMIN":
return "super-admin-mode";
case "ADMIN":
return "admin-mode";
case "GESTIONNAIRE_MEMBRE":
return "gestionnaire-mode";
case "TRESORIER":
return "tresorier-mode";
case "MEMBER":
default:
return "member-mode";
// Déterminer le style basé sur le rôle le plus privilégié
if (hasRole("SUPER_ADMIN")) {
return "super-admin-mode";
} else if (hasAnyRole("ADMIN", "ADMIN_ENTITE")) {
return "admin-mode";
} else if (hasAnyRole("GESTIONNAIRE_MEMBRE", "GESTIONNAIRE_EVENEMENT", "GESTIONNAIRE_AIDE", "GESTIONNAIRE_FINANCE")) {
return "gestionnaire-mode";
} else if (hasRole("TRESORIER")) {
return "tresorier-mode";
} else {
return "member-mode";
}
}
/**
* Retourne le rôle le plus privilégié de l'utilisateur
* SÉCURITÉ: Basé sur la hiérarchie définie
*/
public String getHighestRole() {
if (userSession == null || !userSession.isAuthenticated()) {
return null;
}
List<String> userRoles = userSession.getRoles();
if (userRoles == null || userRoles.isEmpty()) {
return null;
}
// Retourner le premier rôle trouvé dans la hiérarchie
for (String hierarchyRole : ROLE_HIERARCHY) {
if (userRoles.contains(hierarchyRole)) {
return hierarchyRole;
}
}
// Si aucun rôle connu, retourner le premier de la liste
return userRoles.get(0);
}
public String getPermissionMessage(String action) {
return "Vous n'avez pas les permissions nécessaires pour " + action;
@@ -236,4 +353,4 @@ public class PermissionChecker implements Serializable {
public boolean isTresorier() {
return hasRole("TRESORIER");
}
}
}