Spring Security 4 ACL 为用户和角色分配权限
Posted
技术标签:
【中文标题】Spring Security 4 ACL 为用户和角色分配权限【英文标题】:Spring Security 4 ACL assigning permissions to users and roles 【发布时间】:2016-02-27 10:42:24 【问题描述】:我不是 Spring 4 的新手,但我是 Spring Security 4 ACL 的新手。我刚刚在我的 MVC Web 应用程序上实现了 Spring Security 4,它们都是后端 Web 服务。此处发布了指向我所做操作的链接:
http://***.com/questions/33787085/spring-security-4-with-third-party-authentication-token
这增加了我的 URL 的安全性,只有具有特定角色的用户才能请求 URL。这很棒!我们以 SiteMinder 为例,我们没有传回用户名,而是在请求标头中传回了一个令牌。我们调用 OpenAM 并传入这个令牌,然后我们得到一个用户名。我们使用 Hibernate 身份验证从我们的数据库中获取用户信息,我们获取该用户的角色并为我们生成 UserDetails,这样,我们就有了这个经过身份验证的用户的 SecurityContext。
但现在我在同一个 MVC Web 应用程序中面临一个新挑战,即我想为我的对象添加 ACL 安全性。我已经做了大量的研究,还有更多的研究要做,我有几个问题。
看来我可以对 ACL 表应用安全性(创建和/或检索和/或删除和/或更新和/或等)。我想知道是否可以像这样应用安全性:
userA SomeCarObject has permissions (create,read,update)
userB SomeCarObject has permissions (read)
roleA SomeCarObject has permissions (update)
roleB SomeCarObject has permissions (delete)
那么,用户和角色是否可以对一个对象拥有不同的权限?
我们有三种不同的对象类型:汽车、动物、花卉 我们希望使用 ACL 为用户和角色分配对这些对象类型中的每一个具有不同的权限。
这可以通过 Spring Security 4 中的 ACL 来完成吗?你知道有什么好的例子吗?或者,我们是否必须拥有所有用户权限? 所以如果我们的角色有 3 个用户,那么我们需要在 acl 表中有 3 个条目,每个用户一个?这就引出了一个问题……如果用户更改了角色,那么我们将不得不重新评估他们的权限,并且我们可能不得不在 ACL 表中添加或删除记录?
我也在研究权限是如何工作的。我们目前在旧系统中使用位掩码来跟踪权限,所以我们有 recursiveRead (1)、read (2)、write(4)、delete(8)、create(16)、upload(32)、 close(64) 等。似乎我们可以拥有 32 位权限,这对我们来说非常有用。
所以,我正在研究我们如何在 ACL 中定义这些权限。
当我得到更多信息时,我一定会在这里发布。谢谢!
【问题讨论】:
【参考方案1】:那么,一个用户和角色是否都可以对一个用户拥有不同的权限? 对象?
是的,Spring Security 中有一个叫做Sid 的东西——安全身份,可以是权限(角色)或主体(用户)。
假设您使用类似于参考文档中的数据库架构,您的 acl_sid 表应如下所示:
+----+-----------+-------+
| id | principal | sid |
+----+-----------+-------+
| 1 | true | userA |
| 2 | true | userB |
| 3 | false | roleB |
| 4 | false | roleB |
+----+-----------+-------+
然后在 ACL 中添加条目时使用此表中的 id。
这就引出了一个问题……如果用户更改了角色,那么我们会 必须重新评估他们的权限,我们可能需要添加或 从 ACL 表中删除记录?
这不是必需的,但要注意缓存。如果您在 ACL 表中添加/删除记录,请记住清除 AclCache
(如果您使用)。
我也在研究权限是如何工作的。
默认权限在BasePermission 类中定义并使用位掩码模式。但是请注意,Spring Security ACL 实现不处理同一个 ACL 条目的多个权限;这意味着您必须添加一个用于创建的条目,一个用于读取的条目,等等。
【讨论】:
太棒了!感谢您的信息。我会让你知道结果如何。以上是关于Spring Security 4 ACL 为用户和角色分配权限的主要内容,如果未能解决你的问题,请参考以下文章
没有 Spring Security ACL 的 Spring 对象级权限