我正在尝试为RBAC设计一个数据库架构,并且希望能够创建“部门”和“位置”。职位将扩展部门的一般特权。我是否应该只创建一个同时包含职位和部门的“角色”表?还是我应该创建3个表:职位,部门和角色,而职位和部门表具有角色表的外键?提前感谢您对大家的帮助!干杯。

最佳答案

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

  • 您阅读了很多RBAC文献,并认为您理解它。然后,您继续尝试并实现它,只是意识到您根本不了解它。最终,随着您在项目中的进行,这将变得有意义。
  • 根据您的问题,您已经知道要向其应用RBAC的业务领域。但是暂时不要考虑实际的业务对象。您的RBAC实现应该是通用的,这意味着您具有由角色,用户,权限,操作等表组成的数据库模式。然后,您将拥有映射到此类表的对象(一对一关系)。

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

    只是请记住,这还不是全部都是完美的……我已经从实际的RBAC文献中进行了增强/修改/派生,以便添加自定义功能,增强性能等。

    我已经有一段时间没有对此进行研究了,所以我希望我在以下方面是正确的:
  • 用户:实例已创建并保存到其备份表中。
  • 角色:创建实例并将其保存到其备份表中。角色将分配给用户。
  • 权限:权限基本上是对对象的操作的组合。权限被分配给角色。
  • 操作:操作就是您想要的任何东西。它可以是CRUD(创建,读取,更新,删除),也可以是“打印”,“搜索”或人类(或系统)可以对一个对象(或一组对象)执行的任何操作。
  • 对象:基本上,这是构成业务领域的所有对象。

  • 为了获得更大的功能,您可以实现约束以应用大量的各种约束。

    使用此框架,您应该能够映射:
  • 谁可以将用户分配给部门
  • 谁可以将其从部门删除
  • 一个部门中可以有多少用户
  • 部门中可以有什么样的用户(基于他们分配的角色)
  • 哪个卷可以对部门执行哪些操作(创建,读取,更新,删除它们)
  • 关于mysql - 具有多个角色级别的RBAC的数据库模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7329150/

    10-16 15:16