Где мне лучше всего управлять иерархией 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;
}
}
Другим подходом может быть использование правил для определения того, что является иерархическим по отношению к чему-либо еще.
Я думаю, что может быть проблематично создать явную иерархию ACL, как в 1) и 2), поскольку эта иерархия обычно должна отражать структуру системы и является формой дублирования.
Какой самый лучший способ?