Spring Security ACL sieht sehr mächtig aus und ist einfach zu implementieren, wenn Sie bei ihrer Datenbankimplementierung bleiben können. Es scheint jedoch sehr viel komplizierter zu werden, wenn Sie Ihre eigenen Acl
und AclService
implementieren müssen (siehe zum Beispiel (very basic tutorial von nur ~ 26 Seiten)) und es scheint schwierig, Referenzen und Beispiele dafür zu finden (das Tutorial war von 2008).Wann sollte ich Spring Security ACL in meiner Anwendung implementieren?
In unserer Anwendung zum Beispiel haben Benutzer Rollen und gehören zu Abteilungen. Meistens dürfen sie einige Operationen an Objekten ausführen, die zu ihrer Abteilung gehören, basierend auf ihren Rollen. In allen Fällen reicht Abteilung + Rolle aus, um zu entscheiden, ob einem Benutzer eine bestimmte Operation für ein bestimmtes Objekt erteilt werden soll.
Benutzer, Rollen und Abteilungen werden von einer externen Anwendung verwaltet, von der wir sie abrufen, wenn der Benutzer eine Verbindung herstellt (wir verwenden REST-Dienste, aber es könnte auch ein LDAP-Server sein).
Wir würden gerne auf @PreAuthorize('hasPermission(…)')
für die Implementierung von Domänenobjekt Sicherheit verlassen. 2 Lösungen sind also in Sicht:
- Implementieren Sie eine benutzerdefinierte
PermissionEvaluator
, die die gesamte Überprüfung durchführt; oder - Implementieren Sie ACL mit einer benutzerdefinierten
AclService
, die die Objektstruktur erstellt, die für ACL ordnungsgemäß funktioniert.
Es scheint, dass die ganze AclService
Umsetzung wäre schwieriger und komplexer als eine PermissionEvaluator
Umsetzung, aber ACL scheinen Standard.
Nach welchen Kriterien sollten Sie das eine oder das andere implementieren?
Danke für Ihre Antwort.Eigentlich war meine Frage mehr in dem Sinne: wann macht es Sinn und wann lohnt es sich, die Sicherheitsimplementierung Ihrer Anwendung in Spring Security ACL zu integrieren? –
Siehe die aktualisierte Antwort. Hoffentlich wird es helfen. – pgiecek