Каков наилучший способ подключения 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, не затрагивая объекты домена.