【问题标题】:spring security - dynamic rolesspring security - 动态角色
【发布时间】:2011-07-14 03:15:28
【问题描述】:


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

User 和 Campaign 是休眠实体。
他们的连接是多对多(用户有 CampaignsCategories)
如果我把它翻译成 native SQL

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

不断地不断。

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

小例子会有所帮助。

(春季安全3)

【问题讨论】:

  • 类别是用户的属性吗?
  • 抱歉,编辑帖子,这是广告系列的属性
  • Compaign 是如何配置的?它是 Spring bean 吗?

标签: java hibernate spring-security role


【解决方案1】:

看起来您可以使用访问控制列表 (ACL) 来解决此问题:2 名员工拥有相同的 ROLE_EMPLOYEE,但不能做管理员可以做的事情,但在该范围内,他们不能查看或删除每个员工别人的记录。
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/domain-acls.html 应该给你一个更好的主意。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 或者不使用角色来覆盖这种访问控制。 Spring Security 可以做的不仅仅是 RBAC,但这是最受支持的形式。
    • @Donal:是的,我同意,但考虑到问题的性质,这似乎不是 OP 想要的,但也许是。
    • 那么,您对如何实现这种棒状结构有何想法。我的意思是,很常见的情况是某个员工可以看到自己的数据,但他是 ROLE_EMPLOEE。我相信弹簧安全涵盖了这一点,这是一个安全问题。谢谢
    • 我个人所做的是为“self”创建一个角色,如果他们的用户原则与资源目标匹配,则该 self 角色被添加到用户。
    • 你能解释一下...或者举个例子吗?一句复杂的话谢谢(-:
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-05-18
        • 1970-01-01
        • 2018-06-02
        • 2011-11-21
        • 2019-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        相关资源
        最近更新 更多