首页 文章

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

提问于
浏览
0

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

  • 用户

  • 角色

  • 权限

  • rolePermissions(角色和权限之间的多对多)

  • userRoles(用户和角色之间多对多)

有时需要在短时间内授予用户访问权限规则的权限,然后再次删除,例如当有人离开度假而其他人需要接管其中一项任务时 . 简短的回答是创建一个新角色,将该角色分配给用户,并且当不再需要该角色时,从用户中删除该角色或完全删除它 .

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

  • userID

  • PermissionID

  • addDenyFlag(位非NULL)

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

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

1 回答

  • 0

    我是否应该遵循此类方案的标准?

    就在这里 . 您要做的是以与实际应用程序分离的方式实现您自己的授权逻辑 . 这叫做 externalized authorization management .

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

    • 具有您查询决策的授权引擎的架构,一个查询引擎并执行决策的执行点 . 执行点可以保护您的应用程序和管理组件,您可以在其中管理所有授权逻辑 .

    • 用于定义授权要求的策略语言,例如您拥有的临时访问权限 .

    • 用于创建授权请求和响应的请求/响应格式 .

    XACML实现了一种称为基于属性的访问控制(NIST在此定义的ABAC)的模型,并使用策略来表达授权约束 .

    例:

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

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

    • 有一个名为temporaryRole的表,其中包含2个字段:角色名称和到期日期 .

    • 你的规则将成为:

    • 具有临时角色=经理的用户可以对type = blog post的项目执行action = view当且仅当到期日期>当前日期时

    后一种情况需要

    • 包含2个字段的表:用户ID和委托ID .

    • 新规则:具有role = manager的用户或作为管理员委托的用户可以对type = blog post的项执行action = view .

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

    使用XACML有几个好处:

    • 它是基于标准的

    • 它可以增长以迎合新的场景 . 您现在拥有的模型(自行开发,实现)不能满足您的代理委派或临时权限,因此您必须重新实现框架的某些部分 . XACML会为您减轻这种情况 .

    • 您可以将它应用于API,ESB,Web服务,应用程序甚至数据库......

    • it 's technology-neutral: it' ll适用于Java,.NET,Python ......

    有关详细信息,请查看我的SlideShare account,或查看我的blog .

相关问题