使用spring ACL我可以为主题上的某些操作配置权限。我的应用程序需要很少自定义主题的访问权限。所以我不希望填充ACL用于默认依赖,但是如果ACL为空则需要特殊指令。
例如,我们有
branch1
|-doc1
|-doc2
|-doc3
branch2
|-doc1
|-doc2
|-doc3
user1 belongs to branch1
user2 belongs to branch2
默认情况下, user1 可以访问 branch1 中的所有文档(如果ACL为空)。 user2 - > BRANCH2 。有时user1需要特殊访问权限。他需要访问 branch2.doc3 ,他应该对 branch1.doc2 有限制。
如果我尝试以与ACL建议类似的方式实现解决方案,我需要为每个用户添加对应分支中每个文档的权限。这种方式非常难看,因为规范化和& amp;允许。所以我想要实现解决方案,其中ACL逻辑仅用于交叉引用,默认权限允许任何用户访问同一分支中的每个文档......
默认情况下,我可以使用 @PostAuthorize 或 @PreAuthorize 等方法注释,并使用 hasRole , hasPermission 等检查,但是不能建立条件允许限制比角色强,或者根据关系用户分支申请过滤器。
我知道这个想法应该可以实现,但我没有找到相应的描述或技巧示例如何实现它......
答案 0 :(得分:0)
我将首先提出建议:
我的应用程序需要自定义主题的访问权限 非常稀有。所以我不希望填充ACL用于默认依赖,但是 如果ACL为空,则需要特殊指令。
不确定这是一个好主意(不是说你不能,只是提醒)。这需要特殊的逻辑(这些人以这种方式获得授权,并且这些人以这种方式获得授权),这增加了应用程序的复杂性。我将解释一些您可能不了解的Spring Security ACL,然后提供替代方法。
您可以使用父ACL的概念解决您要求的问题。来自docs:
ACL_OBJECT_IDENTITY存储系统中每个唯一域对象实例的信息。列包括[...]父级,ACL_SID表的外键以表示域对象实例的所有者,以及我们是否允许ACL条目从任何父级ACL继承。我们为每个域对象实例都有一行,我们正在为。
存储ACL权限
通过这种方式,branch2
可以有一个acl,branch2.doc3
可以有一个继承自branch2
的acl。
使用此链接可以链接父项,并拥有一个具有默认ACL的根对象。换句话说,所有分支都有一个具有默认ACL的根对象的父级。
使用此方法的优势在于,随着复杂性的增加,它可以更轻松地扩展。您仍然可以执行单一方法,并且可以使用任意复杂的逻辑来定义您的acls。