我应该在哪里最好地管理 ACL 的层次结构?
我看到了管理 ACL 层次结构的三种可能性:
1) ACL 本身管理层次结构:
class Acl {
Acl parent;
// ...
}
2)构造一个单独的树结构来管理层次结构。
3)使用已经存在的层次结构作为 ACL 的隐式层次结构(就像文件系统已经有层次结构一样)。
以下代码是使用现有层次结构的一种可能性:
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;
}
}
另一种方法可能是使用规则来定义什么是分层的。
我认为创建像 1) 和 2) 那样的显式 ACL 层次结构可能会有问题,因为这种层次结构通常必须反映系统结构并且是一种重复形式。
什么是最好的方法?