50

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

我正在使用 Rails,但是 Google 链接的 RBAC 插件看起来没有维护(只有 300 次提交到 SVN;最新的是差不多一年前)。

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

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

4

10 回答 10

73

就我在该领域的基本知识而言,RBAC 的基本参与者是:

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

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

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

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

这种模型的表格将是:

  • 允许
  • 角色
  • 用户
  • 角色权限
  • 用户角色

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

于 2008-10-12T14:36:01.070 回答
27

这是一个简单的图表来说明Amr Mostafa 的出色答案

在此处输入图像描述

于 2014-01-21T09:50:26.140 回答
3

我碰巧在他们那里工作时正在研究 RBAC 子系统……真是巧合。

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

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

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

尤瓦尔=8-)

于 2008-10-12T17:44:10.690 回答
1

您可以使用Restful ACL Rails 插件

于 2008-10-10T08:49:54.480 回答
1

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

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

因为您也希望保持简单;我的建议是;

  • 由于 rbac 限制,任何对象都应派生自基础实体。
  • 应该有一个角色列表,这些角色与实体是一对一的。
  • 应该有一个用户和角色之间的关系列表。

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

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

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

我想提出一些代码示例,但我懒得这样做。如果您对我的 rbac 方式有疑问;你可以在这里问,我一定会回复的。

于 2010-03-12T21:55:56.213 回答
0

Role Requirement与 Restful Authentication 配合得很好,可以提供基于角色的身份验证功能,并且维护良好。

于 2008-10-12T00:03:34.810 回答
0

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

  1. 定义访问控制规则
  2. 组合规则以构建新规则

您可以在此处找到完整的 Rails 应用程序示例:https ://github.com/xli/piece-blog

于 2015-09-05T18:12:21.713 回答
-1

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

同样对于 .net,您可以通过配置处理成员资格和角色提供者以及授权。http://www.odetocode.com/Articles/427.aspx

于 2008-10-11T05:20:51.160 回答
-1

我真的很喜欢这篇博文:https ://content.pivotal.io/blog/access-control-permissions-in-rails

编辑:

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

于 2009-12-21T09:09:43.153 回答
-1

RBAC 简介 -

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

在这里,限制可以通过多个权限来实现,这些权限是由管理员创建来限制访问的,这些权限共同代表一个角色,将分配给用户。

如果我们稍微深入研究一下 RBAC,它基本上包含 3 个特性。

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

2) 授权 - 它定义了用户在应用程序中可以做什么和不能做什么。前任。允许“修改订单”,但不允许“创建新订单”。

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

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

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

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

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

于 2015-08-03T14:08:53.613 回答