Refactoring
This commit is contained in:
541
src/main/java/dev/lions/unionflow/client/bean/MenuBean.java
Normal file
541
src/main/java/dev/lions/unionflow/client/bean/MenuBean.java
Normal file
@@ -0,0 +1,541 @@
|
||||
package dev.lions.unionflow.client.bean;
|
||||
|
||||
import jakarta.enterprise.context.SessionScoped;
|
||||
import jakarta.inject.Named;
|
||||
import io.quarkus.security.identity.SecurityIdentity;
|
||||
import jakarta.inject.Inject;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Bean de gestion de la visibilité des menus en fonction des rôles utilisateur.
|
||||
*
|
||||
* <p>Fournit des méthodes utilitaires pour déterminer quels menus afficher
|
||||
* selon le rôle de l'utilisateur connecté et le type de son organisation.
|
||||
*
|
||||
* <p>Utilise {@link SecurityIdentity} pour l'authentification OIDC en mode web-app,
|
||||
* en cohérence avec {@link dev.lions.unionflow.client.view.LoginBean}.
|
||||
*
|
||||
* @author UnionFlow Team
|
||||
* @version 1.1
|
||||
* @since 2026-03-01
|
||||
*/
|
||||
@Named
|
||||
@SessionScoped
|
||||
public class MenuBean implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Inject
|
||||
SecurityIdentity securityIdentity;
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur a au moins un des rôles spécifiés.
|
||||
*
|
||||
* @param roles Les rôles à vérifier
|
||||
* @return true si l'utilisateur possède au moins un des rôles, false sinon
|
||||
*/
|
||||
private boolean hasAnyRole(String... roles) {
|
||||
if (securityIdentity == null || securityIdentity.isAnonymous()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Set<String> userRoles = securityIdentity.getRoles();
|
||||
if (userRoles == null || userRoles.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (String role : roles) {
|
||||
if (userRoles.contains(role)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// MENUS PRINCIPAUX - Visibilité par rôle
|
||||
// ========================================================================
|
||||
|
||||
/**
|
||||
* Super Administration - Visible uniquement pour SUPER_ADMIN
|
||||
*/
|
||||
public boolean isSuperAdminMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN");
|
||||
}
|
||||
|
||||
/**
|
||||
* Administration - Visible pour admins et secrétaires
|
||||
*/
|
||||
public boolean isAdministrationMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "MEMBRE_BUREAU");
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// NOUVEAUX MENUS PERSONNELS - Visible pour TOUS les membres
|
||||
// ========================================================================
|
||||
|
||||
/**
|
||||
* Mes Finances - Menu personnel pour consulter/gérer ses propres finances
|
||||
* Visible pour TOUS les membres (épargne, cotisations, prêts)
|
||||
*/
|
||||
public boolean isMesFinancesMenuVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Événements - Calendrier et inscriptions aux événements
|
||||
* Visible pour TOUS les membres
|
||||
*/
|
||||
public boolean isMesEvenementsMenuVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mes Demandes d'Aide Sociale - Menu personnel pour les demandes d'aide
|
||||
* Visible pour TOUS les membres
|
||||
*/
|
||||
public boolean isMesAidesSocialesMenuVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mes Formations - Catalogue et inscriptions aux formations
|
||||
* Visible pour TOUS les membres
|
||||
*/
|
||||
public boolean isMesFormationsMenuVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mes Communications - Messages et notifications personnelles
|
||||
* Visible pour TOUS les membres
|
||||
*/
|
||||
public boolean isMesCommunicationsMenuVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// MENUS DE GESTION - Visible pour les responsables uniquement
|
||||
// ========================================================================
|
||||
|
||||
/**
|
||||
* Gestion des Membres - Administration des membres
|
||||
* Visible pour SECRETAIRE et ADMIN uniquement
|
||||
*/
|
||||
public boolean isGestionMembresMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE");
|
||||
}
|
||||
|
||||
/**
|
||||
* Annuaire des Membres - Consultation de la liste (pas de modification)
|
||||
* Visible à partir de MEMBRE_ACTIF (pour créer du lien social)
|
||||
*/
|
||||
public boolean isAnnuaireMembresVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "TRESORIER",
|
||||
"RESPONSABLE_SOCIAL", "RESPONSABLE_EVENEMENTS", "RESPONSABLE_CREDIT",
|
||||
"MEMBRE_BUREAU", "MEMBRE_ACTIF");
|
||||
}
|
||||
|
||||
/**
|
||||
* DEPRECATED: Utilisez isGestionMembresMenuVisible() ou isAnnuaireMembresVisible()
|
||||
* @deprecated Remplacé par isGestionMembresMenuVisible() et isAnnuaireMembresVisible()
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean isMembresMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "MEMBRE_BUREAU", "MEMBRE_ACTIF");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gestion Financière - Administration finances (trésorerie, budgets, comptabilité)
|
||||
* Visible pour TRESORIER et ADMIN uniquement
|
||||
*/
|
||||
public boolean isGestionFinancesMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gestion Événements - Création et organisation des événements
|
||||
* Visible pour RESPONSABLE_EVENEMENTS, SECRETAIRE et ADMIN
|
||||
*/
|
||||
public boolean isGestionEvenementsMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "RESPONSABLE_EVENEMENTS");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gestion Aide Sociale - Traitement des demandes d'aide
|
||||
* Visible pour RESPONSABLE_SOCIAL et ADMIN
|
||||
*/
|
||||
public boolean isGestionAidesSocialesMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "RESPONSABLE_SOCIAL");
|
||||
}
|
||||
|
||||
/**
|
||||
* Organisations - Visible pour admins et super-admins
|
||||
*/
|
||||
public boolean isOrganisationsMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION");
|
||||
}
|
||||
|
||||
/**
|
||||
* Adhésions - Visible pour admins, secrétaires, bureau
|
||||
*/
|
||||
public boolean isAdhesionsMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "MEMBRE_BUREAU");
|
||||
}
|
||||
|
||||
/**
|
||||
* DEPRECATED: Utilisez isGestionFinancesMenuVisible() ou isMesFinancesMenuVisible()
|
||||
* @deprecated Remplacé par isGestionFinancesMenuVisible() (admin) et isMesFinancesMenuVisible() (membre)
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean isFinancesMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER", "RESPONSABLE_CREDIT", "MEMBRE_BUREAU");
|
||||
}
|
||||
|
||||
/**
|
||||
* DEPRECATED: Utilisez isGestionAidesSocialesMenuVisible() ou isMesAidesSocialesMenuVisible()
|
||||
* @deprecated Remplacé par isGestionAidesSocialesMenuVisible() (admin) et isMesAidesSocialesMenuVisible() (membre)
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean isAidesMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "RESPONSABLE_SOCIAL", "SECRETAIRE", "MEMBRE_BUREAU");
|
||||
}
|
||||
|
||||
/**
|
||||
* DEPRECATED: Utilisez isGestionEvenementsMenuVisible() ou isMesEvenementsMenuVisible()
|
||||
* @deprecated Remplacé par isGestionEvenementsMenuVisible() (admin) et isMesEvenementsMenuVisible() (membre)
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean isEvenementsMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "RESPONSABLE_EVENEMENTS", "SECRETAIRE", "MEMBRE_BUREAU", "MEMBRE_ACTIF");
|
||||
}
|
||||
|
||||
/**
|
||||
* Communication - Visible pour admins, secrétaires, bureau
|
||||
*/
|
||||
public boolean isCommunicationMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "RESPONSABLE_EVENEMENTS", "MEMBRE_BUREAU");
|
||||
}
|
||||
|
||||
/**
|
||||
* Documents - Visible pour tous sauf membres simples
|
||||
*/
|
||||
public boolean isDocumentsMenuVisible() {
|
||||
return !hasAnyRole("MEMBRE_SIMPLE");
|
||||
}
|
||||
|
||||
/**
|
||||
* Formation - Visible pour tous les membres actifs et plus
|
||||
*/
|
||||
public boolean isFormationMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "MEMBRE_BUREAU", "MEMBRE_ACTIF");
|
||||
}
|
||||
|
||||
/**
|
||||
* Rapports et Analyses - Visible pour admins, trésoriers, secrétaires, bureau
|
||||
*/
|
||||
public boolean isRapportsMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER", "SECRETAIRE", "MEMBRE_BUREAU");
|
||||
}
|
||||
|
||||
/**
|
||||
* Outils et Utilitaires - Visible pour admins et secrétaires
|
||||
*/
|
||||
public boolean isOutilsMenuVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "MEMBRE_BUREAU");
|
||||
}
|
||||
|
||||
/**
|
||||
* Mon Espace Personnel - Visible pour tous les utilisateurs connectés
|
||||
*/
|
||||
public boolean isPersonnelMenuVisible() {
|
||||
return true; // Tous les utilisateurs connectés
|
||||
}
|
||||
|
||||
/**
|
||||
* Aide et Support - Visible pour tous
|
||||
*/
|
||||
public boolean isAideMenuVisible() {
|
||||
return true; // Tous les utilisateurs
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// ITEMS DE MENUS PERSONNELS - Actions membre
|
||||
// ========================================================================
|
||||
|
||||
/**
|
||||
* Consulter mon épargne - Visible pour TOUS
|
||||
*/
|
||||
public boolean isMonEpargneVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Payer mes cotisations - Visible pour TOUS
|
||||
*/
|
||||
public boolean isPaiementCotisationVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Demander un prêt/crédit - Visible pour TOUS
|
||||
*/
|
||||
public boolean isDemandePretVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mes prêts en cours - Visible pour TOUS
|
||||
*/
|
||||
public boolean isMesPretsVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Demander une aide sociale - Visible pour TOUS
|
||||
*/
|
||||
public boolean isDemandeAideSocialeVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mes demandes d'aide en cours - Visible pour TOUS
|
||||
*/
|
||||
public boolean isMesDemandesAideVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* M'inscrire à un événement - Visible pour TOUS
|
||||
*/
|
||||
public boolean isInscriptionEvenementVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mes inscriptions aux événements - Visible pour TOUS
|
||||
*/
|
||||
public boolean isMesInscriptionsEvenementsVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* M'inscrire à une formation - Visible pour TOUS
|
||||
*/
|
||||
public boolean isInscriptionFormationVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mes formations - Visible pour TOUS
|
||||
*/
|
||||
public boolean isMesFormationsVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mes messages personnels - Visible pour TOUS
|
||||
*/
|
||||
public boolean isMesMessagesVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
/**
|
||||
* Annonces officielles (lecture seule) - Visible pour TOUS
|
||||
*/
|
||||
public boolean isAnnoncesLectureVisible() {
|
||||
return !securityIdentity.isAnonymous();
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// ITEMS DE MENUS SPÉCIFIQUES - Administration
|
||||
// ========================================================================
|
||||
|
||||
/**
|
||||
* Items Keycloak User Manager - Visible uniquement pour SUPER_ADMIN
|
||||
*/
|
||||
public boolean isKeycloakUserManagerVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gestion des cotisations (admin) - Visible pour admins et trésoriers
|
||||
*/
|
||||
public boolean isCotisationsAdminVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER");
|
||||
}
|
||||
|
||||
/**
|
||||
* Comptabilité - Visible pour admins et trésoriers
|
||||
*/
|
||||
public boolean isComptabiliteVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER");
|
||||
}
|
||||
|
||||
/**
|
||||
* Trésorerie - Visible pour admins et trésoriers
|
||||
*/
|
||||
public boolean isTresorerieVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER");
|
||||
}
|
||||
|
||||
/**
|
||||
* Épargne/Crédit (spécifique mutuelles) - Visible pour trésoriers et responsables crédit
|
||||
*/
|
||||
public boolean isEpargneCreditVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER", "RESPONSABLE_CREDIT");
|
||||
}
|
||||
|
||||
/**
|
||||
* Inscription de membres - Visible pour admins et secrétaires
|
||||
*/
|
||||
public boolean isInscriptionMembreVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE");
|
||||
}
|
||||
|
||||
/**
|
||||
* Import/Export de membres - Visible pour admins et secrétaires
|
||||
*/
|
||||
public boolean isImportExportMembreVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE");
|
||||
}
|
||||
|
||||
/**
|
||||
* Validation des adhésions - Visible pour admins et secrétaires
|
||||
*/
|
||||
public boolean isValidationAdhesionVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE");
|
||||
}
|
||||
|
||||
/**
|
||||
* Traitement des demandes d'aide - Visible pour admins et responsables sociaux
|
||||
*/
|
||||
public boolean isTraitementAideVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "RESPONSABLE_SOCIAL");
|
||||
}
|
||||
|
||||
/**
|
||||
* Évaluation sociale - Visible pour responsables sociaux
|
||||
*/
|
||||
public boolean isEvaluationSocialeVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "RESPONSABLE_SOCIAL");
|
||||
}
|
||||
|
||||
/**
|
||||
* Création d'événements - Visible pour admins et responsables événements
|
||||
*/
|
||||
public boolean isCreationEvenementVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "RESPONSABLE_EVENEMENTS", "SECRETAIRE");
|
||||
}
|
||||
|
||||
/**
|
||||
* Logistique événements - Visible pour responsables événements
|
||||
*/
|
||||
public boolean isLogistiqueEvenementVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "RESPONSABLE_EVENEMENTS");
|
||||
}
|
||||
|
||||
/**
|
||||
* Envoi SMS/Email - Visible pour admins et secrétaires
|
||||
*/
|
||||
public boolean isCommunicationMasseVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE");
|
||||
}
|
||||
|
||||
/**
|
||||
* Sauvegardes et maintenance - Visible uniquement pour SUPER_ADMIN
|
||||
*/
|
||||
public boolean isMaintenanceVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN");
|
||||
}
|
||||
|
||||
/**
|
||||
* Rapports financiers - Visible pour admins et trésoriers
|
||||
*/
|
||||
public boolean isRapportFinancierVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER");
|
||||
}
|
||||
|
||||
/**
|
||||
* Exports personnalisés - Visible pour admins, trésoriers, secrétaires
|
||||
*/
|
||||
public boolean isExportsPersonnalisesVisible() {
|
||||
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER", "SECRETAIRE");
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// HELPERS
|
||||
// ========================================================================
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est un super-admin
|
||||
*/
|
||||
public boolean isSuperAdmin() {
|
||||
return hasAnyRole("SUPER_ADMIN");
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est un admin d'organisation
|
||||
*/
|
||||
public boolean isAdminOrganisation() {
|
||||
return hasAnyRole("ADMIN_ORGANISATION");
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est un trésorier
|
||||
*/
|
||||
public boolean isTresorier() {
|
||||
return hasAnyRole("TRESORIER");
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est un secrétaire
|
||||
*/
|
||||
public boolean isSecretaire() {
|
||||
return hasAnyRole("SECRETAIRE");
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est un responsable social
|
||||
*/
|
||||
public boolean isResponsableSocial() {
|
||||
return hasAnyRole("RESPONSABLE_SOCIAL");
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est un responsable événements
|
||||
*/
|
||||
public boolean isResponsableEvenements() {
|
||||
return hasAnyRole("RESPONSABLE_EVENEMENTS");
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est un responsable crédit
|
||||
*/
|
||||
public boolean isResponsableCredit() {
|
||||
return hasAnyRole("RESPONSABLE_CREDIT");
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est membre du bureau
|
||||
*/
|
||||
public boolean isMembreBureau() {
|
||||
return hasAnyRole("MEMBRE_BUREAU");
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est membre actif
|
||||
*/
|
||||
public boolean isMembreActif() {
|
||||
return hasAnyRole("MEMBRE_ACTIF");
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si l'utilisateur est membre simple
|
||||
*/
|
||||
public boolean isMembreSimple() {
|
||||
return hasAnyRole("MEMBRE_SIMPLE");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user