2010-02-12 21 views
5

Dove devo gestire al meglio una gerarchia di ACL?Dove gestire l'ereditarietà ACL?

vedo tre possibilità di gestire una gerarchia di ACL:

1) Gli ACL stessi gestiscono la gerarchia:

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

2) Costruire una struttura ad albero separato per gestire la gerarchia .

3) Utilizzo di una gerarchia già esistente come gerarchia implicita per ACL (come un filesystem ha già una gerarchia).

Il seguente codice sarebbe una possibilità di utilizzare una gerarchia esistente:

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; 
    } 
} 

Un altro approccio potrebbe essere quello di utilizzare le regole per definire ciò che è gerarchica a cos'altro.

Penso che potrebbe essere problematico creare una gerarchia di ACL esplicita come in 1) e 2) perché questa gerarchia di solito deve riflettere la struttura del sistema ed è una forma di duplicazione.

Qual è il modo migliore?

risposta

0

Ho deciso contro l'ereditarietà dinamica per motivi di prestazioni. L'ereditarietà sarà solo una funzione di comodità per gli utenti, ma non sarà implementata direttamente nell'ACL. Le modifiche vengono propagate agli ACL figlio, ma gli ACL figli non conoscono i loro genitori. Userò la gerarchia esistente (come la gerarchia in un file system) per farlo.