2011-03-12 102 views
1


我在我的应用程序中有一个用户需要按类别公开某些数据。
例如:与ROLE_CAMPAIGN
用户A只能看到WHERE 运动 _category_id = 5
与ROLE_CAMPAIGN用户B只能看到WHERE 运动 _category_id IN(5,10,4)
(选择,插入,更新,删除)弹簧安全 - 动态角色

用户和Campaign是hibernate实体。
它们的连接是多对多(用户具有CampaignsCategories)
如果我翻译,要本地 SQL

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

和和。

对于具有某种角色的用户实现动态功能的正确方法是什么?

小例子将有所帮助。

(Spring security 3)

+0

是用户的属性类吗? – Ritesh 2011-03-12 18:28:35

+0

对不起,编辑帖子,这是一个活动的属性 – fatnjazzy 2011-03-12 18:31:11

+0

如何配置Compaign?它是一个Spring bean吗? – Ritesh 2011-03-12 18:34:08

回答

2

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

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

如果您发现您的安全决定不符合此条件,那么您需要将角色重新定义为更细化。

+0

或者不使用角色来覆盖这类访问控制。 Spring Security可以做的不仅仅是RBAC,但是这是最好的支持形式。 – 2011-03-12 17:51:57

+0

@Donal:是的,我同意但是考虑到这个问题的性质似乎并不是OP正在寻找的东西,但也许是这样。 – 2011-03-12 17:54:11

+0

那么,对于如何实现这样的棒状结构,你有什么想法。我的意思是,某个员工可以看到他自己的数据,但他是ROLE_EMPLOEE的情况非常普遍。我认为春季安全涵盖了这一点,这是一个安全问题。谢谢 – fatnjazzy 2011-03-12 18:23:57

0

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

0

通常,RBAC不能为每个受控实体提供不同的权限。 RBAC是二维的 - 权限X ROLE。通常没有任何测试哪些内容被控制的机制。你可能可以使用RBAC来做到这一点,但是这需要很多ROLES来完成,一些自定义和你最终会创建一个ACL。在另一方面

的ACL,固有地是3维 - 权限X ROLES X对象都能够在整个范围内套,或者部分相对于彼此被定义:

权限X ROLE X对象(ACL完全) 权限X ROLE(RBAC) 作用X对象(有用吗?) 权限X对象(有用吗?)

这两个ACL和RBACs允许指定的人不同的角色。 MOST RBAC不允许以任何其他方式分配权限。

但是,许多ACL可以直接将权限分配给与特定对象/实体有关的人员。如果这是一个ACL的适应能力,它会增加很大的灵活性,从而导致复杂性和速度的巨大增加。仅仅为一个人创建一个角色要好得多。所以,不要直接分配给人的权限。

你的问题很大程度上是你没有区分角色的类型,但是RBAC不会为你做到这一点。你应该使用ACL。如果您可以设置权限与ROLE以及ROLE与对象的表格显示,则您的理解时间会更长。

最好的ACL还有另外一个元素:对象组。这就是你需要做批量或'随着你去'权限的分配。您的Campaigns创建代码将按类别预先分配组,然后ROLES和权限会自然发生。