首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自定义对subject的默认访问

自定义对subject的默认访问
EN

Stack Overflow用户
提问于 2016-09-13 10:15:38
回答 1查看 618关注 0票数 0

使用spring,我可以为主题上的某些操作配置权限。我的应用程序很少需要定制对主题的访问权限。因此,我不希望填充默认依赖项ACL,但是如果ACL为空,则需要特殊指令。

例如,我们有

代码语言:javascript
运行
复制
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之类的检查,但不能构建权限限制比角色更强的条件,也不能根据关系用户分支为请求应用筛选器。

我知道这个想法应该是可以实现的,但我没有找到相应的描述或如何实现它的诡计例子.

EN

回答 1

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39467531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档