Spring Security ACL 看起来非常强大,并且当你可以坚持他们的数据库实现时,它很容易实现。但是,当您必须实现自己的Acl
并且AclService
(例如,参见这个(旧的)非常基本的教程,只有约 26 页)时,它似乎变得更加复杂,并且似乎很难找到它的参考和示例(该教程来自 2008 )。
例如,在我们的应用程序中,用户具有角色并属于部门。大多数时候,他们被允许根据他们的角色对属于他们部门的对象执行一些操作。在所有情况下,部门 + 角色足以决定是否应授予用户对特定对象的特定操作。
用户、角色和部门由外部应用程序管理,当用户连接时我们会从该应用程序中检索它们(我们使用的是 REST 服务,但它也可以是 LDAP 服务器)。
我们想依靠@PreAuthorize('hasPermission(…)')
实现域对象安全。因此有两种解决方案:
- 实现一个执行
PermissionEvaluator
整个检查的自定义;或者 - 使用自定义实现 ACL,该自定义
AclService
构建 ACL 正常工作所需的对象结构。
似乎实现整体AclService
会比实现 a 更困难和更复杂PermissionEvaluator
,但 ACL 似乎更标准。
您应该根据哪些标准实施其中一个?