所以,我有 Users
, Roles
和 Permissions
的以下数据库设计 .Users
* ---- * Roles
Roles
* ---- * Permissions
如你所见 User
可能有许多角色 . Role
拥有许多权限 . 但它有一个缺点:如果我想给某个特定的特殊权限 User
,而不是用户's existing roles? Imagine I have role 1691015 . John Doe is in manager. Now, I want to give John a permission 1691016 . 1691017 is in 1691018 role but not in the 1691019 . Although I want to let John 1691020 I don'想要给他"Observer"角色,因为它也有其他权限 .
解决这个问题的一种方法是将每个权限对应的角色与现有角色一起使用 . 每当John需要权限"See Activity"时,我都会授予他一个只包含一个权限的角色"See Activity Role" .
还有其他数据库设计/想法吗?建议?谢谢
2 回答
我相信你正在思考正确的轨道,这是一个很好的设计 .
一个建议是,由于db组织得很好,尝试让用户只通过角色获得权限 . 如果有人想要直接获得许可,只需创建一个专门的角色即可 .
就像你提到的
John Manager
没有See Activity
的例子:这个See Activity
权限可能与Observers
有关但Observers
比它只有See Activity
有更大的权力 . 在这种情况下,您的设计使您可以自由创建一个名为ActivityObservers
的新角色,该角色具有See Activity
的权限 . 那样John Manager
可以同时是Manager
和ActivityObservers
角色 .我相信你已经掌握了索引 . 运行一些场景来回答以下问题:当
John Manager
离开时会发生什么?你怎么能轻易说出John Manager
有哪些权限?任何表中都有Active
标志吗?有一个是否有用?这样的活动标志可以帮助每个用户快速禁用帐户,角色或许可 .您是否需要一个审计表来告知何时以及通过角色向哪个用户授予了哪些权限?如果是这样,基于触发器的审核可能会有所帮助 . 像
Jim Manager
这样的场景需要完全相同的权限John Manager
- 这可以多快完成?总的来说,你有一个很好的概念!
将较少的角色作为较大角色的子集是一个好主意 . 这可以通过下面的SQL轻松确定
这将给出角色成员拥有的权限/权限总数 . 同样的查询也适用于经理的角色
逻辑上,如果manager角色是观察者类的超类,那么管理者应该能够看到与观察者相同的活动 .