弹簧安全 - 动态角色

时间:2011-03-12 17:19:47

标签: java hibernate spring-security role


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

用户和广告系列是休眠实体 他们的联系是ManyToMany(用户有CampaignsCategories)
如果我将其翻译为 native SQL

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

然后继续。

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

很少的例子会有所帮助。

(春季安全3)

4 个答案:

答案 0 :(得分:2)

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

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

如果您发现您的安全决策不符合此条件,则需要重新定义角色以使其更加精细。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

角色不是您正在寻找的答案。访问控制列表是Emanuel所述问题的解决方案。配置为使用角色时,Spring安全性无法在本机上区分具有相同角色的两个用户。

答案 3 :(得分:0)

通常,RBAC不能为每个受控实体提供不同的权限。 RBAC是二维的 - 权限X ROLE。通常没有任何机制可以测试哪些内容受到控制。您可以使用RBAC来实现这一目标,但是需要很多ROLES才能完成,而且一些自定义并且您最终还是会创建ACL。

另一方面,

ACL本身就是3维 - 权限X ROLES X对象都可以在完整集或部分集中相互定义:

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

两个ACL和RBAC允许为人们分配不同的ROLES。 MOST RBAC不允许以任何其他方式分配权限。

但是,许多ACL能够直接向特定对象/实体的人员分配权限。如果这是ACL的一个特性,它会增加复杂性和速度损失的大量灵活性。只为一个人创建一个ROLE就好了。因此,不要直接向人们分配权限。

你的问题主要是你没有区分ROLES的类型,但RBAC不会为你做这件事。您应该使用ACL。如果您可以设置表格显示权限与ROLE和ROLE与对象,您将使您的理解更长。

大多数优秀ACL具有的另一个元素:对象组。这就是您需要批量处理或“随时随地”分配权限。您的广告系列的创建代码会按类别预先分配组,然后ROLES和权限会自然发生。