2010-02-12 5 views
5

Wo sollte ich am besten eine Hierarchie von ACLs verwalten?Wo ACL-Vererbung verwalten?

Ich sehe drei Möglichkeiten, um eine Hierarchie von ACLs zu verwalten:

1) Die ACLs selbst die Hierarchie verwalten:

class Acl { 
    Acl parent; 
    // ... 
} 

2) eine separate Baumstruktur Constructing die Hierarchie zu verwalten .

3) Verwenden einer bereits vorhandenen Hierarchie als implizite Hierarchie für ACLs (wie ein Dateisystem hat bereits eine Hierarchie).

würde der folgende Code eine Möglichkeit, eine bestehende Hierarchie zu verwenden:

interface AclHolder { 
    Acl getAcl(); 
} 

public class Folder implements AclHolder { 
    private AclHolder parent; 
    private Acl acl; 

    @Override 
    public Acl getAcl(){ 
     return acl==null ? parent.getAcl() : acl; 
    } 
} 

Ein weiterer Ansatz Regeln verwenden könnte zu definieren, was sie sonst was hierarchisch ist.

Ich denke, es könnte problematisch sein, eine explizite ACL-Hierarchie wie in 1) und 2) zu erstellen, da diese Hierarchie normalerweise die Systemstruktur widerspiegeln muss und eine Art der Duplizierung ist.

Was ist der beste Weg?

Antwort

0

Ich entschied mich aus Leistungsgründen gegen dynamische Vererbung. Vererbung ist nur eine bequeme Funktion für Benutzer, wird aber nicht direkt in der ACL implementiert. Änderungen werden an untergeordnete ACLs weitergegeben, aber untergeordnete ACLs kennen ihre Eltern nicht. Ich verwende dafür die vorhandene Hierarchie (wie die Hierarchie in einem Dateisystem).