Где управлять наследованием ACL? - PullRequest
5 голосов
/ 12 февраля 2010

Где мне лучше всего управлять иерархией 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), поскольку эта иерархия обычно должна отражать структуру системы и является формой дублирования.

Какой самый лучший способ?

1 Ответ

0 голосов
/ 28 июля 2011

Я решил отказаться от динамического наследования по соображениям производительности. Наследование будет только удобной функцией для пользователей, но не будет напрямую реализовано в ACL. Изменения распространяются на дочерние ACL, но дочерние ACL не знают своих родителей. Для этого я буду использовать существующую иерархию (например, иерархию в файловой системе).

...