2009-07-01 6 views
2

Ich baue gerade eine Java-Finanzanwendung, der ich Berechtigungen hinzufügen muss, und fragte mich, welche Ansätze die Leute unternommen haben, um dieses Problem zu lösen, und ob es Drittanbieter-Java-Bibliotheken gibt, die man empfehlen würde.Standardberechtigungen Modell

Derzeit habe ich eine Reihe von Benutzern, die grob in Rollen (z. B. "Händler") kategorisiert werden können. Mit jeder Rolle können keine oder mehrere Berechtigungen verknüpft sein (z. B. "Handel erstellen").

Entwurfsentscheidungen:

Ist es besser, allgemeinere Berechtigungen (zB „Handel“) sowie flankierende Maßnahmen zu haben („create“, „update“, „löschen“) oder mehr beschreibende Berechtigungen ("zB "create trade")?

Was ist ein guter Weg, um die Tatsache zu modellieren, dass einige Berechtigungen parametrisiert sind (zB User X hat die Erlaubnis "Trade erstellen", aber nur für an der LSE gehandelte Aktien)? Name-Wert-Paare vorher, aber das scheint ziemlich hässlich zu sein.Meine einzige Idee hier ist, Erlaubnis als Besucher zu implementieren (siehe Beispielcode unten), aber ich bin besorgt, dass die Schnittstelle unhandlich werden könnte (a s die # Business-Objekte erhöht).

public interface Permission { 
    void checkPermission(Trade trade) throws SecurityPermission; 
    void checkPermission(AnotherBusinessObject obj) throws SecurityPermission; 
} 

public class ExchangePermission implements Permission { 
    private final Exchange exchange; 

    public void checkPermission(Trade trade) { 
    if (!exchange.equals(trade.getExchange())) { 
     throw new SecurityException(); 
    } 
    } 
} 

Alle Ideen/Vorschläge sind mehr als willkommen. Danke im Voraus.

Antwort

3

"Berechtigungen" ist hier nicht der richtige Begriff - der etablierte Begriff ist Capabilities, obwohl "Permissions" auch weit verbreitet ist - und Java hat bereits eine Permission API, die es verwendet, um Code in einer Sandbox-Umgebung zu beschränken. Sehen Sie, ob Sie das verwenden können, anstatt eigene Klassen zu definieren.

Ich würde sagen, dass irgendeine Art von Callback-Design notwendig sein wird, und die implies()-Methode in der Java Permission API kann auch nützlich sein.

+0

wahr, Permission API ein guter Ausgangspunkt ist 1 – dfa

1

Wäre es wert, einen Blick auf , die einen großen Sicherheitsrahmen bietet und könnte Ihnen eine Menge Arbeit sparen. Und selbst wenn Sie es nicht verwenden, könnte es Ihnen zumindest einige Ideen geben, wie Sie es selbst implementieren sollten.

Obwohl Acegi für die Verwendung mit Feder ausgelegt ist, ist es auch möglich, es zu benutzen without Spring

Verwandte Themen