DRY strict appliqué : web réutilise directement les DTOs officiels de unionflow-server-api 1.0.8 (CreateBeneficiaireEffectifRequest, BeneficiaireEffectifResponse, AuditTrailOperationResponse, CreateRoleDelegationRequest, RoleDelegationResponse) au lieu de DTOs miroirs locaux. Aucune duplication. Bump dépendance api 1.0.6 → 1.0.8 REST clients @RegisterRestClient configKey=unionflow-api - BeneficiaireEffectifRestClient : CRUD lister/trouverParId/creer/mettreAJour/desactiver - AuditTrailRestClient : 5 endpoints lecture (parUtilisateur, historique, parOrganisation, sodViolations, financial) - RoleDelegationRestClient : listerParOrganisation / creer / revoquer Beans @ViewScoped - BeneficiaireEffectifBean : recherche (KYC|org|PEP), création formulaire, marquerPep, désactiver - AuditTrailViewerBean : 5 modes (USER/ENTITY/ORG/SOD_VIOLATIONS/FINANCIAL), couleurAction (DELETE→danger, VALIDATE→success, etc.), couleurSod - RoleDelegationBean : recherche/créer/révoquer, couleurStatut (ACTIVE/REVOQUEE/EXPIREE) Pages XHTML - /pages/secure/conformite/beneficiaires-effectifs.xhtml — recherche + tableau + nouvelle UBO (panel toggleable) - /pages/secure/conformite/audit-trail.xhtml — filtres mode + tableau + détail JSONB (pre format) - /pages/secure/admin/role-delegations.xhtml — table actives + nouvelle (datePicker dates) MenuBean + menu.xhtml - 3 nouveaux flags : isBeneficiairesEffectifsVisible, isAuditTrailViewerVisible, isRoleDelegationsVisible - 3 menuitems ajoutés au sous-menu Conformité existant (icônes pi-users, pi-history, pi-share-alt) - Gating par rôles : COMPLIANCE_OFFICER + CONTROLEUR_INTERNE pour audit ; ADMIN_ORGANISATION + PRESIDENT pour délégations Tests (10/10 verts, 31/31 cumulé S8+S11) - AuditTrailViewerBeanTest : 8 tests (couleurAction × 6 cas, couleurSod, defaults) - RoleDelegationBeanTest : 2 tests (couleurStatut × 5, defaults)
688 lines
23 KiB
Java
688 lines
23 KiB
Java
package dev.lions.unionflow.client.bean;
|
|
|
|
import dev.lions.unionflow.client.view.UserSession;
|
|
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;
|
|
|
|
@Inject
|
|
UserSession userSession;
|
|
|
|
/**
|
|
* 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 pour les responsables et bureau SEULEMENT (PAS pour MEMBRE_ACTIF)
|
|
*
|
|
* Raison métier: Un membre simple n'a généralement pas besoin de voir la liste complète
|
|
* des autres membres. Cela peut poser des problèmes de:
|
|
* - RGPD: Exposition non justifiée de données personnelles
|
|
* - Sécurité: Risque de spam/phishing entre membres
|
|
* - UX: Surcharge du menu pour un usage limité
|
|
*
|
|
* Si l'organisation souhaite activer l'annuaire pour MEMBRE_ACTIF, cela doit être
|
|
* fait via configuration explicite (future Phase 3).
|
|
*/
|
|
public boolean isAnnuaireMembresVisible() {
|
|
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "SECRETAIRE", "TRESORIER",
|
|
"RESPONSABLE_SOCIAL", "RESPONSABLE_EVENEMENTS", "RESPONSABLE_CREDIT",
|
|
"MEMBRE_BUREAU");
|
|
// MEMBRE_ACTIF retiré intentionnellement pour raisons UX et RGPD
|
|
}
|
|
|
|
/**
|
|
* 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");
|
|
}
|
|
|
|
/**
|
|
* 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");
|
|
}
|
|
|
|
// ========================================================================
|
|
// MENUS PAR MODULE (conditionnels selon le type d'organisation active)
|
|
// Chaque méthode combine : rôle requis + module actif dans l'org active.
|
|
// Un SUPERADMIN voit tout sans restriction de module.
|
|
// ========================================================================
|
|
|
|
/**
|
|
* Vérifie si un module est actif pour l'organisation courante.
|
|
* Les SUPER_ADMIN voient tous les modules.
|
|
*/
|
|
private boolean hasModule(String module) {
|
|
if (hasAnyRole("SUPER_ADMIN")) return true;
|
|
if (userSession == null) return false;
|
|
return userSession.hasModuleActif(module);
|
|
}
|
|
|
|
/** Menu Tontine — visible si module TONTINE actif + rôle adéquat. */
|
|
public boolean isTontineMenuVisible() {
|
|
return hasModule("TONTINE") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER",
|
|
"TONTINE_RESP", "TONTINE_MANAGER", "TONTINE_COLLECTOR");
|
|
}
|
|
|
|
/** Menu Tontine (membres) — consultation de ses propres tontines. */
|
|
public boolean isTontineMemberVisible() {
|
|
return hasModule("TONTINE") && !securityIdentity.isAnonymous();
|
|
}
|
|
|
|
/** Menu Épargne — visible si module EPARGNE actif. */
|
|
public boolean isEpargneMenuVisible() {
|
|
return hasModule("EPARGNE") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER",
|
|
"MUTUELLE_RESP", "EPARGNE_MANAGER");
|
|
}
|
|
|
|
/** Menu Épargne (membres). */
|
|
public boolean isEpargneMemberVisible() {
|
|
return hasModule("EPARGNE") && !securityIdentity.isAnonymous();
|
|
}
|
|
|
|
/** Menu Crédit — visible si module CREDIT actif. */
|
|
public boolean isCreditMenuVisible() {
|
|
return hasModule("CREDIT") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER",
|
|
"MUTUELLE_RESP", "CREDIT_ANALYSTE", "RESPONSABLE_CREDIT");
|
|
}
|
|
|
|
/** Menu Crédit (membres). */
|
|
public boolean isCreditMemberVisible() {
|
|
return hasModule("CREDIT") && !securityIdentity.isAnonymous();
|
|
}
|
|
|
|
/** Menu Agriculture / Campagnes — visible si module AGRICULTURE actif. */
|
|
public boolean isAgricoleMenuVisible() {
|
|
return hasModule("AGRICULTURE") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "COOP_RESP");
|
|
}
|
|
|
|
/** Menu Agriculture (membres). */
|
|
public boolean isAgricoleMemberVisible() {
|
|
return hasModule("AGRICULTURE") && !securityIdentity.isAnonymous();
|
|
}
|
|
|
|
/** Menu Collecte de fonds — visible si module COLLECTE_FONDS actif. */
|
|
public boolean isCollecteFondsMenuVisible() {
|
|
return hasModule("COLLECTE_FONDS") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "COLLECTE_RESP");
|
|
}
|
|
|
|
/** Menu Projets ONG — visible si module PROJETS_ONG actif. */
|
|
public boolean isProjetOngMenuVisible() {
|
|
return hasModule("PROJETS_ONG") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "ONG_RESP", "PROJET_MANAGER");
|
|
}
|
|
|
|
/** Menu Culte / Dons religieux — visible si module CULTE_DONS actif. */
|
|
public boolean isCulteMenuVisible() {
|
|
return hasModule("CULTE_DONS") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "CULTE_RESP", "PASTEUR", "DIACRE");
|
|
}
|
|
|
|
/** Menu Vote — visible si module VOTES actif. */
|
|
public boolean isVoteMenuVisible() {
|
|
return hasModule("VOTES") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "VOTE_RESP", "SCRUTATEUR");
|
|
}
|
|
|
|
/** Menu Registre / Agrément — visible si module REGISTRE_AGREMENT actif. */
|
|
public boolean isRegistreAgrementMenuVisible() {
|
|
return hasModule("REGISTRE_AGREMENT") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "REGISTRE_RESP");
|
|
}
|
|
|
|
/** Menu Gouvernance / Organigramme — visible si module GOUVERNANCE actif. */
|
|
public boolean isGouvernanceMenuVisible() {
|
|
return hasModule("GOUVERNANCE") &&
|
|
hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION");
|
|
}
|
|
|
|
// ========================================================================
|
|
// Pages conformité (Sprint 8 — backend P1-NEW-7 / P2-NEW-3 / P1-NEW-15)
|
|
// ========================================================================
|
|
|
|
/**
|
|
* Tableau de bord conformité — Compliance Officer / Contrôleur Interne / direction.
|
|
* @since 2026-04-25
|
|
*/
|
|
public boolean isConformiteDashboardVisible() {
|
|
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "PRESIDENT",
|
|
"TRESORIER", "COMPLIANCE_OFFICER", "CONTROLEUR_INTERNE");
|
|
}
|
|
|
|
/**
|
|
* Rapports trimestriels Contrôleur Interne — restreint contrôleur + président + admin.
|
|
* @since 2026-04-25
|
|
*/
|
|
public boolean isRapportsTrimestrielsVisible() {
|
|
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "PRESIDENT",
|
|
"CONTROLEUR_INTERNE");
|
|
}
|
|
|
|
/**
|
|
* PI-SPI Readiness — admin technique uniquement.
|
|
* @since 2026-04-25
|
|
*/
|
|
public boolean isPispiReadinessVisible() {
|
|
return hasAnyRole("SUPER_ADMIN", "COMPLIANCE_OFFICER");
|
|
}
|
|
|
|
/**
|
|
* Bénéficiaires Effectifs (UBO) — Instr. BCEAO 003-03-2025.
|
|
* @since 2026-04-25 (Sprint 11)
|
|
*/
|
|
public boolean isBeneficiairesEffectifsVisible() {
|
|
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "COMPLIANCE_OFFICER",
|
|
"CONTROLEUR_INTERNE");
|
|
}
|
|
|
|
/**
|
|
* Audit Trail viewer — compliance / contrôle interne.
|
|
* @since 2026-04-25 (Sprint 11)
|
|
*/
|
|
public boolean isAuditTrailViewerVisible() {
|
|
return hasAnyRole("SUPER_ADMIN", "COMPLIANCE_OFFICER", "CONTROLEUR_INTERNE");
|
|
}
|
|
|
|
/**
|
|
* Délégations de rôles — admin org / président.
|
|
* @since 2026-04-25 (Sprint 11)
|
|
*/
|
|
public boolean isRoleDelegationsVisible() {
|
|
return hasAnyRole("SUPER_ADMIN", "ADMIN_ORGANISATION", "PRESIDENT");
|
|
}
|
|
|
|
/**
|
|
* Retourne true si l'organisation active dispose d'au moins un module métier spécifique
|
|
* (au-delà des modules communs toujours disponibles).
|
|
* Utilisé pour afficher/masquer la section "Modules métier" dans la navigation.
|
|
*/
|
|
public boolean hasAnyBusinessModule() {
|
|
if (hasAnyRole("SUPER_ADMIN")) return true;
|
|
return isTontineMenuVisible() || isCreditMenuVisible() || isEpargneMenuVisible()
|
|
|| isAgricoleMenuVisible() || isCollecteFondsMenuVisible()
|
|
|| isProjetOngMenuVisible() || isCulteMenuVisible()
|
|
|| isVoteMenuVisible() || isRegistreAgrementMenuVisible()
|
|
|| isGouvernanceMenuVisible();
|
|
}
|
|
}
|