Как связать списки ACL с защищенными ресурсами? - PullRequest
3 голосов
/ 12 февраля 2010

Каков наилучший способ подключения ACL к защищенному ресурсу?

1) Должен ли защищенный ресурс содержать ссылку на свой ACL?

interface AclHolder {
    Acl getAcl();
}

Это было бы просто, но если объект живет в базе данных, его необходимо создать до того, как это станет возможнымпроверить права доступа.

2) Spring Security использует механизм с полным именем класса и идентификатором объекта для внешнего подключения и получения ACL.Это может привести к проблеме выбора n + 1, поскольку несколько ACL не могут быть выбраны по определенному критерию.Эта система может сломаться, если имена классов изменятся во время рефакторинга.

3) Другим способом может быть сохранение ссылки на защищенный ресурс в ACL.При отложенной загрузке можно было бы проверить ACL без загрузки защищенного ресурса из базы данных.

class Acl<T> {
    @Lazy public T protectedResource;
    // acl methods ...
}

4) Каждый объект может иметь дескриптор безопасности (как в Windows):

class SecurityDescriptor<T> {
  public Acl acl;
  @Lazy public T protectedResource;
  // ...
}

Что лучше?

Предварительное решение: Я реализую интерфейс AclHolder, поскольку доменные объекты могут реализовывать его, а также можно подключать списки ACL, не затрагивая объекты домена.

1 Ответ

0 голосов
/ 15 февраля 2013

В Spring Spring реализована реализация acl со встроенным кэшированием, и после того, как кэш согрелся, способ получения acl в основном предназначен для данного экземпляра объекта, если вы реализуете реализацию с помощью аннотаций Spring-Security, таким образом, вы не обращаете +1 проблема, и более того, она основана на jdbc.
Изменение имен классов объектов домена может быть проблемой, но и в этом случае таблица acl_class хранит идентификаторы классов и должна быть достаточно небольшой для управления им, поскольку рефакторинг этого уровня происходит между основными выпусками в производственной системе. Реализация acl в Spring-security - это разумный выбор, чтобы иметь быструю реализацию acl без вмешательства пользователя (т.е. модели доменов остаются независимыми от безопасности, что в первую очередь относится к уровню приложений).

...