最佳的基于角色的访问控制(RBAC)数据库模型

时间:2008-10-10 05:42:49

标签: ruby-on-rails permissions roles access-control rbac

用于跟踪Web应用程序的基于角色的访问控制的最佳数据库架构是什么?

我正在使用Rails,但谷歌链接的RBAC插件看起来没有维护(只有300次提交到SVN;最近几乎是一年前)。

这个概念很简单,可以从头开始实施,但又复杂而重要,值得一试。

那么其他人如何构建和实施他们的RBAC模型?

10 个答案:

答案 0 :(得分:56)

对于我在该领域的基本知识,RBAC的基本参与者是:

  • 资源。
  • 权限。
  • 用户。
  • 角色(即群组)。

资源< - require - > (一个或多个权限

角色< - 是 - >的集合(一个或多个权限

用户< - 可以拥有 - > (一个或多个角色

这种模型的表格是:

  • 许可
  • 作用
  • 用户
  • role_permission
  • USER_ROLE

现在,如果您希望应用程序的用户能够配置资源所需的权限,那么您可能还希望在此处包含资源。但我从来不需要那个。希望有所帮助。

答案 1 :(得分:20)

这是一个简单的图表来说明Amr Mostafa's excellent answer

enter image description here

答案 2 :(得分:3)

我碰巧在这里工作的RBAC子系统正在工作......真是巧合。

我的模型基于系统中需要权限的不同实体的构建块,无论是查看/更新的属性还是要执行的操作。当然,系统中也有不同的角色(可以提供给用户),将整个事物放在一起的粘合剂是访问规则,连接特定角色,特定权限需求实体和授予的权限。访问规则可能如下所示:

rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission

等等。我会把ERD作为练习留给读者;-)如果你有问题,请发表评论。

Yuval = 8 - )

答案 3 :(得分:2)

您可以使用Restful ACL Rails plugin

答案 4 :(得分:1)

我认为你问题的答案与你想要的一样深。如果您碰巧考虑将角色放入组中,然后将组与用户关联是不够的。最终,您需要为特定对象(论坛,视频等)的用户授予特定权限。

我更接近于Yuval的答案,我们所需要的只是关联项目范围的对象+动作+用户。提供这个;基础对象(实体)非常有意义。从Entity继承的任何对象都可以通过这种方式轻松地与用户+操作相关联。

你也希望保持简单;我的建议是;

  • 由于rbac限制而导致的任何对象都应来自基本实体。
  • 应该有一个角色列表,与实体一一对应。
  • 应该有用户和角色之间的关系列表。

为了更进一步,我还会推荐以下内容(针对自动化的rbac)

  • 我使用基于服务的访问我的对象。那是;我创建了对象的存储库(为我做db-access),我通过服务函数访问存储库。
  • 我在每个服务功能的开头使用自定义属性。这定义了访问该功能所需的角色。
  • 我使用User参数访问我的所有服务函数,每个服务函数在执行之前都会进行角色检查。反射帮助我理解我调用哪个函数,以及它具有什么样的角色(通​​过自定义属性)
  • 我还在我的应用程序启动时运行初始化程序,它检查所有函数(及其属性)并查看是否添加了新的必需角色。如果我刚刚添加了一个角色,并且似乎不在db上,则会在db上创建它。

但是,唉,这只适用于.NET,据我所知,Java没有自定义属性,因此不太可能用于Java。

我想提出一些代码示例,但我太懒了。如果你对我的rbac方式有疑问,你可以问这里,我肯定会回复。

答案 5 :(得分:0)

Role Requirement非常适用于Restful Authentication,可以提供基于角色的身份验证功能并且维护良好。

答案 6 :(得分:-1)

对于.net应用程序,您应该查看Visual Guard http://www.visual-guard.com/之类的内容,以避免必须从头开始处理权限和角色。

对于.net,您还可以使用配置处理成员资格和角色提供程序以及授权。 http://www.odetocode.com/Articles/427.aspx

答案 7 :(得分:-1)

我非常喜欢这篇博客文章http://pivotallabs.com/users/nick/blog/articles/272-access-control-permissions-in-rails

编辑:

似乎ryanb的railscasts沿着相同的路线思考并使用类似于pivotollabs帖子的基本技术创建了一个名为cancan https://github.com/ryanb/cancan的宝石。

答案 8 :(得分:-1)

RBAC简介 -

基于角色的访问控制系统是一种基于组织用户的角色限制对“某些源或应用程序或应用程序的某些功能”的访问的方法。

此处,限制可以通过多个权限进行,这些权限由管理员创建以限制访问权限,这些权限共同代表一个角色,该角色将分配给用户。

如果我们在RBAC中稍微深入一点,它基本上包含3个功能。

1)身份验证 - 确认用户的身份。通常通过用户帐户和密码或凭证来完成。

2)授权 - 它定义了用户在应用程序中可以执行和不可执行的操作。防爆。允许“修改订单”,但不允许“创建新订单”。

3)审核用户对应用程序的操作。 - 它跟踪用户对应用程序的操作,以及谁已授予哪些用户访问权限?

这是RBAC系统非常基本的顶视图。

RBAC系统的基本结构可以包含以下组件: 用户,角色,权限或限制,资源。

  • 权限或限制 - 权限表示对其的访问权限 应用程序的资源。
  • 角色 - 包含权限集合
  • 用户 - 分配给用户的单个或多个角色,因此最终用户 通过角色包含权限。

除此之外,如果要支持复杂方案,还可以拥有用户集合 - 称为 - 组,并且可以将角色分配给组。 所以,这是关于RBAC结构的非常基本的信息。

答案 9 :(得分:-1)

尝试https://github.com/ThoughtWorksStudios/piece,它是您管理基于用户角色的访问控制的规则引擎:

  1. 定义访问控制规则
  2. 合并规则以构建新规则
  3. 您可以在此处找到完整的Rails应用程序示例:https://github.com/xli/piece-blog