6

我正在尝试为 RBAC 提供数据库模式,并且我希望能够创建“部门”和“职位”。职位将扩展部门的一般特权。我应该只创建一个“角色”表,同时包含职位和部门吗?或者我应该创建 3 个表:职位、部门和角色,职位和部门表具有角色表的外键?提前谢谢大家的帮助!干杯。

4

2 回答 2

20

我在尝试自定义 RBAC 实现时的经验如下:

  1. 您阅读了很多 RBAC 文献并认为您理解它。然后你继续尝试实现它,只是意识到你根本没有真正理解它。最终,随着您在项目中的进展,这将是有意义的。

  2. 根据您的问题,您已经知道要应用 RBAC 的业务领域。但是现在忘记实际的业务对象。您的 RBAC 实现应该是通用的,这意味着您有一个由角色、用户、权限、操作等表组成的数据库模式。然后,您将拥有映射到此类表的对象(一对一关系)。

一旦有了这个 RBAC 实现,就可以将其建模到几乎任何业务领域,例如您提到的“部门”。

请记住,这并不完美......我已经从实际的 RBAC 文献中进行了增强/修改/派生,以添加自定义功能、增强性能等。

我已经有一段时间没有做这个了,所以我希望我在以下方面是正确的:

  • 用户:创建实例并将其保存到它的后备表中。
  • 作用:创建实例并将其保存到它的后备表中。角色将被分配给用户。

  • 权限:权限基本上是对对象的操作的组合。权限被分配给角色。

  • 手术:手术就是你想要的任何东西。它可以是 CRUD(创建、读取、更新、删除),也可以是“打印”、“搜索”或人类(或系统)可以对一个对象(或一组对象)执行的任何操作。

  • 对象:这基本上是构成您的业务领域的所有对象。

为了获得更多功能,您可以实施约束以应用大量各种限制。

使用此框架,您应该能够映射:

  • 谁可以将用户分配到部门
  • 谁可以将他们从部门中删除
  • 一个部门可以有多少用户
  • 部门中可以有哪些类型的用户(根据他们分配的角色)
  • 哪些卷可以对一个部门执行哪些操作(创建、读取、更新、删除它们)
  • 等等。
于 2011-09-30T20:05:02.573 回答
4

Standards? This is an unanswerable question, as none such things exists. RBAC is always customized on the basis of the requirements.

You might want to see following resources:

Archived version of above link (https://web.archive.org/web/20110718210859/http://www.sitepoint.com/forums/php-application-design-147/patterns-tutorial-series-part-1-rbac-domain-model-162027.html)

于 2011-09-07T06:06:00.380 回答