Spring Security ACL sembra molto potente e facile da implementare quando si può restare fedeli all'implementazione del proprio database. Tuttavia sembra diventare molto più complicato quando devi implementare il tuo Acl
e AclService
(vedi ad esempio questo (vecchio) very basic tutorial di solo ~ 26 pagine) e sembra difficile trovare riferimenti ed esempi per questo (quel tutorial era del 2008).Quando devo implementare l'ACL Spring Security nella mia applicazione?
Nella nostra applicazione, ad esempio, gli utenti hanno ruoli e appartengono ai reparti. La maggior parte delle volte, sono autorizzati a eseguire alcune operazioni su oggetti che appartengono al loro dipartimento in base ai loro ruoli. In tutti i casi, dipartimento + ruolo è sufficiente per decidere se a un utente debba essere concessa un'operazione specifica su un oggetto specifico.
Utenti, ruoli e reparti sono gestiti da un'applicazione esterna da cui li recuperiamo quando l'utente si connette (stiamo utilizzando i servizi REST ma potrebbe anche essere un server LDAP).
Ci piacerebbe fare affidamento su @PreAuthorize('hasPermission(…)')
per l'implementazione della sicurezza degli oggetti di dominio. 2 soluzioni sono quindi in vista:
- Implementare una personalizzata
PermissionEvaluator
che esegue i controlli completi; oppure - Implementare ACL con un valore personalizzato
AclService
che costruisce la struttura dell'oggetto necessaria affinché gli ACL funzionino correttamente.
Sembra che l'attuazione dell'intero AclService
sarebbe più difficile e più complesso di attuazione di un PermissionEvaluator
, ma ACL sembrano essere più standard.
In base a quali criteri è necessario implementare l'uno o l'altro?
Grazie per la risposta.In realtà la mia domanda era più nel senso: quando ha senso e quando vale la pena implementare l'implementazione della sicurezza della tua applicazione in Spring Security ACL? –
Vedere la risposta aggiornata. Speriamo che possa essere d'aiuto. – pgiecek