1


我的应用程序中有一个用户需要按类别公开一些数据。
例如:
具有 ROLE_CAMPAIGN 的用户 A 只能看到 WHERE活动_category_id = 5
具有 ROLE_CAMPAIGN 的用户 b 只能看到 WHERE活动_category_id IN(5,10,4)
(选择、插入、更新、删除)

User 和 Campaign 是休眠实体。
他们的连接是 ManyToMany (用户有 CampaignsCategories )
如果我将其转换为原生SQL

SELECT * FROM CAMPAIGNS WHERE CATEGORY_ID IN (SELECT ID FROM USER_CATEGORIES)

不断地。

对具有某些角色的用户实施动态的正确方法是什么。

小例子会有所帮助。

(春季安全3)

4

4 回答 4

2

您正在寻找安全模型缺陷的技术解决方案。

具有相同角色的人应该具有相同的访问权限。

如果您发现您的安全决策不遵循此条件,那么您需要重新定义角色以更细化。

于 2011-03-12T17:48:20.390 回答
2

看起来您可以使用访问控制列表 (ACL) 来解决此问题:2 名员工具有相同的 ROLE_EMPLOYEE 并且无法执行管理员可以执行的操作,但在该范围内,他们不允许查看或删除彼此的记录。
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/domain-acls.html应该给你一个更好的主意。

于 2011-03-12T21:42:56.830 回答
0

角色不是您要寻找的答案。正如伊曼纽尔所说,访问控制列表是您问题的解决方案。当配置为使用角色时,Spring 安全性无法本地区分具有相同角色的两个用户。

于 2011-03-13T13:42:52.060 回答
0

通常,RBAC 不能为每个受控实体授予不同的权限。RBAC 是二维的——权限 X 角色。通常没有任何机制来测试正在控制哪些内容。您可能可以为此使用 RBAC,但这样做需要很多 ROLES 和一些自定义,而且您最终还是会创建 ACL。

另一方面,ACL 本质上是 3 维的 - 权限 X 角色 X 对象都能够在完整集或部分集中相互定义:

权限 X 角色 X 对象(完整的 ACL) 权限 X 角色 (RBAC) 角色 X 对象(有用吗?) 权限 X 对象(有用吗?)

ACL 和 RBAC 都允许为人们分配不同的角色。大多数 RBAC 不允许以任何其他方式分配权限。

但是,许多 ACL 能够针对特定对象/实体直接向人们分配权限。如果这是 ACL 的 cpability,它会在复杂性和速度损失的巨大增加下增加大量的灵活性。为一个人专门创建一个角色要好得多。所以不要去那里直接向人们分配权限。

您的问题主要是您没有区分角色的类型,但是 RBAC 无论如何也不会为您做到这一点。您应该使用 ACL。如果您可以设置权限与角色、角色与对象的表格显示,您将保持更长时间的理解。

大多数优秀的 ACL 还具有一个元素:对象组。这就是您需要进行批量或“随用随取”的权限分配。您的活动创建代码将按类别预先分配组,然后角色和权限将自然发生。

于 2012-05-28T14:52:23.820 回答