Spring Security ACL выглядит очень мощным и простым в использовании, когда вы можете придерживаться своей реализации. Однако, похоже, он становится намного сложнее, когда вам нужно реализовать свои собственные Acl
и AclService
(см., Например, этот (старый) очень простой учебник только ~ 26 страниц), и кажется трудно найти ссылки и примеры для него (этот учебник был с 2008 года).
В нашем приложении, например, пользователи имеют роли и принадлежат отделам. В большинстве случаев им разрешено выполнять некоторые операции над объектами, принадлежащими их департаменту, на основе их ролей. Во всех случаях роль отдела + достаточно, чтобы решить, должен ли пользователь предоставлять конкретную операцию для определенного объекта.
Пользователи, роли и отделы управляются внешним приложением, из которого мы извлекаем их, когда пользователь подключается (мы используем службы REST, но он также может быть сервером LDAP).
Мы хотели бы положиться на @PreAuthorize('hasPermission(…)')
для реализации защиты объектов домена. Таким образом, доступны 2 решения:
- Внедрить пользовательский
PermissionEvaluator
, который выполняет все проверки; или - Внедрить ACL с пользовательским
AclService
, который строит структуру объекта, необходимую для нормальной работы ACL.
Кажется, что реализация целого AclService
будет сложнее и сложнее, чем реализация PermissionEvaluator
, но ACL выглядит более стандартным.
На основании каких критериев вы должны реализовать один или другой?