如何使用 Spring 安全 ACL 获取用户有权访问的域对象列表?

How do I get a list of domain objects a user has permissions for with Spring Security ACLs?

我刚开始使用 Spring 安全 ACL。我想获取用户拥有(任何)权限的域对象列表。

例如,系统有 1000 个 'buildings',用户可以访问任意数量的这些建筑物。当用户登录时,我想向他们展示他们有权访问的建筑物列表。

类似于 myAclService.getObjectsForUser('myemail@gmail.com', Building.class)

我开始认为 ACL 在这个方向上不起作用,但这一定是一个共同的挑战,因此至少必须有一个模式来说明如何在不复制数据的情况下与 ACL 一起实现这一目标。

欢迎任何想法,谢谢!

我相信 Spring 中提供的内容是正确的。 ACL 更多地是从 object 的角度而不是 subject(主体)的角度。

您可以从 Spring 安全检查所有 AclService 的 SQL 代码,特别是 JdbcAclServiceJdbcMutableAclService.

您想对较小的数据集使用 @PostFilter 注释

@PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, 'admin')")
public List<Buildings> getAll();

对于更大的数据集,您可能需要使用我对 How to get a List of Objects that a user can access using ACLs related tables

的回答中的查询