2010-10-20 11 views
6

Ich habe über Frühling ACL gelesen, aber es scheint nicht sehr kompetent zu sein. Zum Beispiel:Ist Spring ACL eine gute ACL-Implementierung?

  1. Keine Möglichkeit, alle Objekte vom Typ X mit Erlaubnis Y
  2. Keine Möglichkeit zur Liste, um automatisch die Schemata für neue Einrichtungen

zu erstellen Was Sie für ACL verwenden? Ist es schlau, die ACL so vom Domänenmodell zu entkoppeln?

+0

Was haben Sie am Ende gemacht? Roll deinen eigenen ? – NimChimpsky

Antwort

11

Wir haben versucht, das Spring ACL-Modell zu verwenden und fanden es unhandlich. Wir haben unsere eigene, viel einfachere (aber auch weniger generische) Implementierung implementiert und dann die Spring Security-Teile (accessDecisionManagers, Voters, Interceptors) geschrieben, um unser Schema zu handhaben. Ich hoffe, das hilft.

3

Sie möchten vielleicht einen Blick auf Apache Shiro werfen.

Von der Website: Apache Shiro ist ein leistungsstarkes und einfach zu verwendendes Java-Sicherheitsframework, das Authentifizierung, Autorisierung, Kryptografie und Sitzungsverwaltung durchführt. Mit der leicht verständlichen API von Shiro können Sie schnell und einfach jede Anwendung sichern - von den kleinsten mobilen Anwendungen bis hin zu den größten Web- und Unternehmensanwendungen.

Viele Menschen bevorzugen den Weg Shiro handles permissions

+1

Das einzige Bugaboo über Shiro, ist keine OpenID oder OAuth. Der Hauptproblembericht dafür ist FÜNF Jahre alt und bekommt höchstens einmal wöchentlich Aufmerksamkeit. Schade, denn ansonsten sieht Shiro wirklich gut aus, weit einfacher als Spring oder Spring ACL – Dennis

0

Bei der Verwendung von Hibernate, können Sie automatisch die acl Schema gegen die db laufen durch das Hinzufügen dieser zu persistence.xml:

<property name="hibernate.hbm2ddl.import_files" value="/import.sql"/> 

<property name="hibernate.hbm2ddl.import_files_sql_extractor" value="org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor" /> 

und das Hinzufügen, das Schema zu /resources/import.sql

Sie können alle Objekte vom Typ X mit der Berechtigung Y wie folgt auflisten:

select 
    * 
from acl_entry a 
join acl_object_identity b on a.acl_object_identity = b.id 
join acl_class c on b.object_id_class = c.id 
where 
    class = X 
    and mask = Y 

Spring Security ACL weist jedoch aufgrund von Paginierungsproblemen grundlegende Mängel in der Zeilensicherheit auf. Sie sollten Row Security in der Datenbank mit Sichten oder integrierten Tools ausführen, wenn Ihre Datenbank diese unterstützt.