Class ModuloService
Questa classe orchestra le operazioni relative ai moduli funzionali del sistema, integrando controlli di sicurezza (RBAC), gestione della cache per performance e sincronizzazione delle relazioni di pertinenza tra Aziende e Ruoli.
Fa ampio uso delle astrazioni di Caching di Spring (Cacheable, CacheEvict)
per ridurre il carico sul database durante i frequenti controlli di autorizzazione.
- Since:
- 1.0.0
- Version:
- 1.5.0
- Author:
- Modulink Team
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AttivazioneServiceprivate final ModuloRepositoryprivate final PertinenzaService -
Constructor Summary
ConstructorsConstructorDescriptionModuloService(ModuloRepository moduloRepository, PertinenzaService pertinenzaService, AttivazioneService attivazioneService) Costruttore per Dependency Injection. -
Method Summary
Modifier and TypeMethodDescriptionfindModuliByUtente(UtenteEntity utente) Recupera la lista dei moduli accessibili da un utente, con supporto caching.getModuloById(int idModulo) Recupera un modulo per ID, con caching.booleanisAccessibleModulo(int id, UtenteEntity utente) Verifica l'accessibilità puntuale di un modulo, con caching.voidupdateModuloAffiliations(AziendaEntity azienda, int idModulo, List<RuoloEntity> ruoli) Aggiorna le associazioni (Pertinenze) tra un Modulo e i Ruoli di un'Azienda.
-
Field Details
-
moduloRepository
-
pertinenzaService
-
attivazioneService
-
-
Constructor Details
-
ModuloService
public ModuloService(ModuloRepository moduloRepository, PertinenzaService pertinenzaService, AttivazioneService attivazioneService) Costruttore per Dependency Injection.- Parameters:
moduloRepository- Repository principale Moduli.pertinenzaService- Service per gestione pertinenze.attivazioneService- Service per gestione attivazioni.- Since:
- 1.0.0
-
-
Method Details
-
findModuliByUtente
@Cacheable(value="moduliByUtente", key="#utente.email") public List<ModuloEntity> findModuliByUtente(UtenteEntity utente) Recupera la lista dei moduli accessibili da un utente, con supporto caching.Il risultato viene memorizzato nella cache
moduliByUtenteindicizzata dall'email utente. Questo evita di rieseguire la complessa query di join ad ogni visualizzazione della dashboard.- Parameters:
utente- L'utente richiedente.- Returns:
- Lista di moduli abilitati.
- Since:
- 1.2.0
-
isAccessibleModulo
@Cacheable(value="moduloAccess", key="{#id, #utente.email}") public boolean isAccessibleModulo(int id, UtenteEntity utente) Verifica l'accessibilità puntuale di un modulo, con caching.Metodo ad alta frequenza di chiamata (es. nei filtri di sicurezza web). Il risultato booleano è cachato in
moduloAccesscon chiave composta {idModulo, email}.- Parameters:
id- ID del modulo.utente- L'utente da verificare.- Returns:
truese l'accesso è consentito,falsealtrimenti.- Since:
- 1.2.5
-
getModuloById
Recupera un modulo per ID, con caching.Poiché i metadati dei moduli (nome, descrizione, url) cambiano raramente, il caching riduce significativamente gli accessi al DB.
- Parameters:
idModulo- ID del modulo.- Returns:
- L'entità modulo.
- Throws:
IllegalArgumentException- se l'ID non corrisponde a nessun modulo.- Since:
- 1.0.0
-
updateModuloAffiliations
@Transactional @CacheEvict(value={"moduliByUtente","moduloAccess","modulo"}, allEntries=true) public void updateModuloAffiliations(AziendaEntity azienda, int idModulo, List<RuoloEntity> ruoli) Aggiorna le associazioni (Pertinenze) tra un Modulo e i Ruoli di un'Azienda.Questo metodo implementa una logica differenziale (Sync): 1. Identifica le associazioni esistenti. 2. Rimuove quelle non più presenti nella lista
ruolitarget. 3. Aggiunge le nuove associazioni mancanti.Gestione Cache: Essendo un'operazione che modifica i permessi, annotata con
CacheEvictper invalidare tutte le entry delle cache correlate (moduliByUtente,moduloAccess,modulo), forzando il ricalcolo dei permessi al prossimo accesso.- Parameters:
azienda- L'azienda contesto dell'operazione.idModulo- L'ID del modulo da configurare.ruoli- La nuova lista completa dei ruoli abilitati per quel modulo in quell'azienda.- Since:
- 1.5.0
-