使用spring,我可以为主题上的某些操作配置权限。我的应用程序很少需要定制对主题的访问权限。因此,我不希望填充默认依赖项ACL,但是如果ACL为空,则需要特殊指令。
例如,我们有
branch1
|-doc1
|-doc2
|-doc3
branch2
|-doc1
|-doc2
|-doc3
user1 belongs to branch1
user2 belongs to branch2默认情况下,实现user1应该有权访问branch1中的所有文档(如果ACL是空的)。user2 -> branch2.有时,user1需要特殊的访问。他需要访问分支2.doc3,他应该对分支1.doc2有一个限制!
如果我尝试使用ACL建议以类似的方式实现解决方案,则需要为对应分支中的每个文档添加每个用户的权限。这种方式是非常丑陋的,因为规范化和许可。因此,我希望实现解决方案,其中ACL逻辑仅用于交叉引用,默认权限允许任何用户访问同一分支中的每个文档。
默认情况下,我可以使用方法注释,如@PostAuthorize或@PreAuthorize,其中包含hasRole、hasPermission之类的检查,但不能构建权限限制比角色更强的条件,也不能根据关系用户分支为请求应用筛选器。
我知道这个想法应该是可以实现的,但我没有找到相应的描述或如何实现它的诡计例子.
发布于 2016-09-13 13:07:48
首先,我要提出一个建议:
我的应用程序很少需要定制对主题的访问权限。因此,我不希望填充默认依赖项ACL,但是如果ACL为空,则需要特殊指令。
不确定这是个好主意(不要说你不能,只是提出警告)。这需要特殊的逻辑(这些人是这样授权的,而那些人是这样授权的),这增加了应用程序的复杂性。我将解释一些关于的内容,您可能不知道,然后提供另一种方法。
您可以使用父ACL的概念来解决所要求的问题。来自文档
ACL_OBJECT_IDENTITY存储系统中每个唯一域对象实例的信息。列包括..。父级,表示域对象实例所有者的ACL_SID表的外键,以及是否允许ACL项从任何父级ACL继承。对于每个要存储ACL权限的域对象实例,我们只有一行。
通过这种方式,branch2可以拥有acl,而branch2.doc3可以有继承自branch2的acl。
使用它,您可以连锁父级,并具有一个具有默认ACL的根对象。换句话说,所有分支都有一个具有默认ACL的根对象的父对象。
使用这种方法的好处是,随着复杂性的增加,它变得更容易扩展。您仍然可以强制使用单一方式,并且可以使用任意复杂的逻辑来定义acls。
https://stackoverflow.com/questions/39467531
复制相似问题