Spring Security 4 ACL 为用户和角色分配权限
Spring Security 4 ACL assigning permissions to users and roles
我不是 Spring 4 的新手,但我是 Spring Security 4 ACL 的新手。我刚刚在我的 MVC web-app 上实现了 Spring Security 4,它们都是 back-end web-services。 link 我所做的 post 在这里:
这为我的 URL 添加了安全性,只有具有特定角色的用户才能请求 URL。这很棒!我们以 SiteMinder 为例,我们没有传回用户名,而是在请求 header 中传回了一个令牌。我们调用传入此令牌的 OpenAM 并取回用户名。我们使用 Hibernate 身份验证从我们的数据库中获取用户信息,我们获取该用户的角色,这为我们创建了 UserDetails,这样,我们就有了这个经过身份验证的用户的 SecurityContext。
但是现在我在同一个 MVC web-app 中接受了一个新的挑战,那就是我想为我的 object 添加 ACL 安全性。我已经做了很多研究,未来还会有更多,我有几个问题。
我似乎可以使用 ACL table 应用安全性(创建 and/or 检索 and/or 删除 and/or 更新 and/or 等)。我想知道是否可以像这样应用安全性:
userA SomeCarObject has permissions (create,read,update)
userB SomeCarObject has permissions (read)
roleA SomeCarObject has permissions (update)
roleB SomeCarObject has permissions (delete)
那么,一个用户和角色是否可以对 object 拥有不同的权限?
我们有三种不同的 object 类型:汽车、动物、鲜花
我们希望使用 ACL 为用户和角色分配对这些 object 类型中的每一种具有不同的权限。
这可以用 Spring Security 4 中的 ACL 来完成吗?你知道有什么好的例子吗?或者,我们是否必须拥有所有用户权限?
所以如果我们有一个角色有 3 个用户,那么我们需要在 acl table 中有 3 个条目,每个用户一个?这就引出了一个问题……如果用户更改角色,那么我们将不得不 re-evaluate 他们的权限,并且我们可能必须从 ACL tables?[=13= 添加或删除记录]
我也在研究权限的工作原理。我们目前在旧系统中使用位掩码来跟踪权限,因此我们有递归读取(1),读取(2),写入(4),删除(8),创建(16),上传(32), close(64) 等。似乎我们可以拥有 32 位权限,这对我们来说非常有用。
所以,我正在研究我们如何在 ACL 中定义这些权限。
随着我获得更多信息,我一定会post这里。谢谢!
So, can BOTH a user AND role both have different permissions to an
object?
是的,Spring 安全中有一个叫做 Sid 的东西 - 安全身份,可以是权限(角色)或委托人(用户)。
假设您使用类似于参考文档中的数据库模式,您的 acl_sid table 应该类似于:
+----+-----------+-------+
| id | principal | sid |
+----+-----------+-------+
| 1 | true | userA |
| 2 | true | userB |
| 3 | false | roleB |
| 4 | false | roleB |
+----+-----------+-------+
然后在 ACL 中添加条目时使用此 table 中的 ID。
That begs the question ... if a user changes a role, then we would
have to re-evaluate their permissions, and we might have to add or
delete records from the ACL tables?
这应该不是必需的,但要注意缓存。如果你add/delete条记录在ACLtables中,记得清除AclCache
如果你用了
I am also looking at how Permissions work.
默认权限在 BasePermission class 中定义并使用位掩码模式。但是请注意,Spring 安全 ACL 实现 不会 处理同一 ACL 条目上的多个权限;这意味着您必须为创建添加一个条目,为读取添加一个条目,依此类推。
我不是 Spring 4 的新手,但我是 Spring Security 4 ACL 的新手。我刚刚在我的 MVC web-app 上实现了 Spring Security 4,它们都是 back-end web-services。 link 我所做的 post 在这里:
这为我的 URL 添加了安全性,只有具有特定角色的用户才能请求 URL。这很棒!我们以 SiteMinder 为例,我们没有传回用户名,而是在请求 header 中传回了一个令牌。我们调用传入此令牌的 OpenAM 并取回用户名。我们使用 Hibernate 身份验证从我们的数据库中获取用户信息,我们获取该用户的角色,这为我们创建了 UserDetails,这样,我们就有了这个经过身份验证的用户的 SecurityContext。
但是现在我在同一个 MVC web-app 中接受了一个新的挑战,那就是我想为我的 object 添加 ACL 安全性。我已经做了很多研究,未来还会有更多,我有几个问题。
我似乎可以使用 ACL table 应用安全性(创建 and/or 检索 and/or 删除 and/or 更新 and/or 等)。我想知道是否可以像这样应用安全性:
userA SomeCarObject has permissions (create,read,update)
userB SomeCarObject has permissions (read)
roleA SomeCarObject has permissions (update)
roleB SomeCarObject has permissions (delete)
那么,一个用户和角色是否可以对 object 拥有不同的权限?
我们有三种不同的 object 类型:汽车、动物、鲜花 我们希望使用 ACL 为用户和角色分配对这些 object 类型中的每一种具有不同的权限。
这可以用 Spring Security 4 中的 ACL 来完成吗?你知道有什么好的例子吗?或者,我们是否必须拥有所有用户权限? 所以如果我们有一个角色有 3 个用户,那么我们需要在 acl table 中有 3 个条目,每个用户一个?这就引出了一个问题……如果用户更改角色,那么我们将不得不 re-evaluate 他们的权限,并且我们可能必须从 ACL tables?[=13= 添加或删除记录]
我也在研究权限的工作原理。我们目前在旧系统中使用位掩码来跟踪权限,因此我们有递归读取(1),读取(2),写入(4),删除(8),创建(16),上传(32), close(64) 等。似乎我们可以拥有 32 位权限,这对我们来说非常有用。
所以,我正在研究我们如何在 ACL 中定义这些权限。
随着我获得更多信息,我一定会post这里。谢谢!
So, can BOTH a user AND role both have different permissions to an object?
是的,Spring 安全中有一个叫做 Sid 的东西 - 安全身份,可以是权限(角色)或委托人(用户)。
假设您使用类似于参考文档中的数据库模式,您的 acl_sid table 应该类似于:
+----+-----------+-------+
| id | principal | sid |
+----+-----------+-------+
| 1 | true | userA |
| 2 | true | userB |
| 3 | false | roleB |
| 4 | false | roleB |
+----+-----------+-------+
然后在 ACL 中添加条目时使用此 table 中的 ID。
That begs the question ... if a user changes a role, then we would have to re-evaluate their permissions, and we might have to add or delete records from the ACL tables?
这应该不是必需的,但要注意缓存。如果你add/delete条记录在ACLtables中,记得清除AclCache
如果你用了
I am also looking at how Permissions work.
默认权限在 BasePermission class 中定义并使用位掩码模式。但是请注意,Spring 安全 ACL 实现 不会 处理同一 ACL 条目上的多个权限;这意味着您必须为创建添加一个条目,为读取添加一个条目,依此类推。