如何处理用户角色权限的例外?

时间:2014-09-16 23:00:56

标签: security permissions authorization roles

想象一个Web安全系统,它由5个表组成,用于处理Web应用程序的授权部分:

  1. 用户
  2. 角色
  3. 权限
  4. rolePermissions(角色和权限之间的多对多)
  5. userRoles(用户和角色之间多对多)
  6. 有时,用户需要在短时间内被授予对权限规则的访问权限,然后再次被删除,例如当有人离开度假而其他人需要接管其中一项任务时。简短的回答是创建一个新角色,将该角色分配给用户,当不再需要该角色时,从用户中删除该角色或将其完全删除。

    我宁愿不必一直为类似的东西创建角色。建议的一个解决方案是有一个名为userPermissionChanges的单独表,它将记录:

    1. 用户ID
    2. PermissionID
    3. addDenyFlag(位非空)
    4. 如果这是要添加到用户的额外权限,则addDenyFlag将为true,如果是需要删除的权限,则为false。在服务器范围查询和缓存用户权限时,我们还会包含/排除更改表,并对每个用户的权限进行必要的更改。

      建议的解决方案理论上可行,但我不确定这是处理这个问题的好方法。有没有人有任何关于如何最好地解决这个问题的建议?这种情况是否应该遵循标准?

1 个答案:

答案 0 :(得分:0)

  

这种情况是否应该遵循标准?

是的。您要做的是以与实际应用程序分离的方式实现您自己的授权逻辑。这称为外部授权管理

有一种称为XACML的标准 - 可扩展访问控制标记语言的简称 - 由OASIS在过去10多年中开发。 XACML为您提供了什么?

  1. 具有您查询决策的授权引擎的架构,一个查询引擎并执行决策的执行点。执行点可以保护您的应用程序和管理组件,您可以在其中管理所有授权逻辑。
  2. 用于定义授权要求的策略语言,例如您拥有的临时访问权限。
  3. 用于创建授权请求和响应的请求/响应格式。
  4. XACML实现了一个名为基于属性的访问控制模型(NIST在此定义的ABAC),并使用策略来表达授权约束。

    示例:

    • 具有 role = manager 的用户可以对 type = blog post 的项目执行 action = view

    您使用的用例涉及临时分配和代理委派用例。你可以按如下方式实现前者:

    • 有一个名为temporaryRole的表,其中包含2个字段:角色名称和到期日期。
    • 你的规则将成为:
      • 具有临时角色=经理的用户可以对 type = blog post 的项目执行 action = view 当且仅当< em>失效日期&gt;当前日期

    后一种情况需要

    • 包含2个字段的表:用户ID和委托ID。
    • 新规则:具有 role = manager 的用户或作为代理人的用户可以执行 action = view 关于 type = blog post 的项目。

    动作,角色,委托,项目类型都是属性。您可以使用的属性数量没有限制。你需要弄清楚的是从哪里读取它们。

    使用XACML有几个好处:

    • 它的基于标准的
    • 它可以成长以迎合新的场景。您现在拥有的模型(自行开发,实现)不能满足您的代理委派或临时权限,因此您必须重新实现框架的某些部分。 XACML会为你减轻这种情况。
    • 您可以将其应用于API,ESB,Web服务,应用程序甚至数据库......
    • 它的技术中立:它可以在Java,.NET,Python中运行......

    查看我的SlideShare account了解更多信息,或查看我的blog示例。