我在MySQL中使用基于属性的权限方案制作数据库架构时遇到了问题。
我的应用程序中有三层用户。我们将它们称为1,2和3层。在第1层,我将获得第1层,第2层和第3层的权限集。在第2层,我将拥有第2层和第3层的权限集。在第3层,我将只有第1层的权限集。
每个层都使用一些标准权限。但是,每个层至少有一个仅对该层唯一的权限标志。此外,有两个层使用的权限,但不是第三个。
我的问题是如何存储这些数据。我只能想出两种方法,而且两种方式都错了......
1)每一行都有一个包含每个权限标志的表。
(这似乎会导致大多数行都有一堆未使用的列,而且似乎很难维护,因为我必须记住哪个层使用哪个权限。)
2)制作SEVEN表。一个用于基本权限的表,一个用于每个层的表及其特定权限,以及一个用于每个2层组合的表。
(这似乎完全矫枉过正,并且使得批量检索用户权限的过程变得复杂。)
答案 0 :(得分:1)
忘记当前的权限和层级设置 - 可能会改变。
您通常希望的是,如果情况发生变化,您可以通过更新,删除,插入行而不是架构更改进行调整。因此,(1)不允许新的权限(2)完全取决于哪些权限在哪些层中。
保持一般性,层有多个权限,权限可以是多层:
Tiers: id, name
Permissions: id, name
AllowedPermissions: id, tierId, permId // one row per allowed combo
如果要对层继承进行建模,可以向层级添加parentTierId
或类似的东西。如果某些权限未被继承,您还可以向inheritable
添加Permissions
列(因为您说:"每个层至少有一个权限标志仅对该层唯一。" )