我正在尝试为 RBAC 提供数据库模式,并且我希望能够创建“部门”和“职位”。职位将扩展部门的一般特权。我应该只创建一个“角色”表,同时包含职位和部门吗?或者我应该创建 3 个表:职位、部门和角色,职位和部门表具有角色表的外键?提前谢谢大家的帮助!干杯。
2 回答
我在尝试自定义 RBAC 实现时的经验如下:
您阅读了很多 RBAC 文献并认为您理解它。然后你继续尝试实现它,只是意识到你根本没有真正理解它。最终,随着您在项目中的进展,这将是有意义的。
根据您的问题,您已经知道要应用 RBAC 的业务领域。但是现在忘记实际的业务对象。您的 RBAC 实现应该是通用的,这意味着您有一个由角色、用户、权限、操作等表组成的数据库模式。然后,您将拥有映射到此类表的对象(一对一关系)。
一旦有了这个 RBAC 实现,就可以将其建模到几乎任何业务领域,例如您提到的“部门”。
请记住,这并不完美......我已经从实际的 RBAC 文献中进行了增强/修改/派生,以添加自定义功能、增强性能等。
我已经有一段时间没有做这个了,所以我希望我在以下方面是正确的:
- 用户:创建实例并将其保存到它的后备表中。
作用:创建实例并将其保存到它的后备表中。角色将被分配给用户。
权限:权限基本上是对对象的操作的组合。权限被分配给角色。
手术:手术就是你想要的任何东西。它可以是 CRUD(创建、读取、更新、删除),也可以是“打印”、“搜索”或人类(或系统)可以对一个对象(或一组对象)执行的任何操作。
- 对象:这基本上是构成您的业务领域的所有对象。
为了获得更多功能,您可以实施约束以应用大量各种限制。
使用此框架,您应该能够映射:
- 谁可以将用户分配到部门
- 谁可以将他们从部门中删除
- 一个部门可以有多少用户
- 部门中可以有哪些类型的用户(根据他们分配的角色)
- 哪些卷可以对一个部门执行哪些操作(创建、读取、更新、删除它们)
- 等等。
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:
- http://www.sitepoint.com/forums/php-application-design-147/patterns-tutorial-series-part-1-rbac-domain-model-162027.html
- http://csrc.nist.gov/rbac/rbac-std-ncits.pdf
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)