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?