2017-02-12 19 views
1

给定根据某些用户权限显示对象(例如电影)的应用程序。访问控制:具有附加组成员身份而不是对象属性的RBAC

一般显示或创建对象的权限实现为具有角色和权限的RBAC。

特定访问具有某些属性的对象(例如,具有“戏剧”属性的电影)的权限应使用成员资格实施。这意味着对象没有属性“戏剧”,它是组“戏剧”的成员。如果用户和对象是同一组中的成员,则用户具有访问此对象的特定权限。可以有不同的组显示,创建或删除对象,如简单的查看器组或某种编辑组。此外还有一个表格,指定哪些组类型与特定对象上的某些操作相关。例如,对象“电影”上的“显示”动作的相关组可以是“流派”和“年龄”(电影对某些观众的适合性)。

以所述方式实现它的原因是在不触摸代码的情况下具有很大的灵活性。可以在数据库中处理对组的更改。

常规数据库设计:

design

示例:电影 “亡魂” 是的基团的成员 “体裁:戏剧” 和 “年龄:18”。如果用户也是这些组的成员,则用户可以访问它。

example

这听起来像一个好方法吗?有没有类似于这种方法的现有解决方案?它是否有主要的缺点(例如太多的数据库查询 - 每天可能有几百个用户)?

请与我分享你对这个问题的看法 - 选择“戏剧”作为范例的类别并不是巧合;)我只是不知道这是死路一条,还是我正朝着正确的方向前进。我坚持了很长一段时间。

+0

BTW刚刚意识到这个答案也可能证明是有用的:http://stackoverflow.com/questions/30701482/mysql-access-control –

+0

thx快速回复:)我需要一些时间来深入了解您的建议。 – NedRise

回答

0

至少你有良好的幽默感:-)

你的方法听起来不错。只要您保持较低的参数数量,您就可以利用基于角色的访问控制(RBAC)和一些附加参数(例如,组会员资格。

但是,从长远来看,如果你想实现业务驱动授权(访问控制),您需要一种方法来独立做你的代码这样的:你不希望重写你的应用程序代码,每次有是需求变更。

为此,有一种称为基于属性的访问控制(ABAC)的访问控制模型,可以让您独立于代码定义授权策略。

在ABAC,您有以下概念:

  • 它定义了一个策略执行点(PEP)和策略决策点(PDP)的架构。 PEP位于您的应用程序的前面(或内部)。它拦截业务请求(例如查看电影的请求)并向PDP发送授权请求。PDP配置有策略。根据请求,PDP将做出决定:或者是,许可或否,Deny。
  • 策略语言:策略语言是基于属性的(因此名称为ABAC)。这意味着您可以使用任意数量的属性(例如,用户角色,用户ID,用户组成员身份,但也包括用户年龄,用户位置,用户订阅以及电影评级,电影类别,电影价格等资源属性... )
  • 请求/响应方案:这是您如何请求授权。它本质上是一个是/否的流程。 “用户可以做X吗?”,“是的,他们可以。”

ABAC有几种实现方式 - 其中一些是框架专用的,例如, CanCanCan。 XACML和ALFA是两种与任何特定框架无关的方法。您可以从开源和两种语言例如商业实现选择:

  • 开源:SunXACML,ATT XACML
  • 商业:公理化策略服务器
+0

XACML [Wikipedia page](https://en.wikipedia.org/wiki/XACML#XACML_Implementations)上提及的其他开源替代方法,如AuthzForce或WSO2 Balana。 – cdan

相关问题