用户角色权限数据库设计

时间:2015-12-24 07:28:20

标签: database-design permissions user-roles

因此,我为UsersRoles& Permissions
Users * ---- * Roles
Roles * ---- * Permissions  
如您所见User可能有许多角色。 Role拥有许多权限。但它有一个缺点:如果我想给特定的特殊User一些特定的权限,而不是用户现有的角色,该怎么办?想象一下,我有角色“经理”。 John Doe是经理。现在,我想给John一个“看活动”的许可。 “查看活动”是“观察者”角色,但不在“经理”中。虽然我想让约翰“看到活动”我不想给他“观察者”角色,因为它也有其他权限。

解决这个问题的一种方法是将每个权限对应的角色与现有角色一起使用。每当John需要“查看活动”权限时,我将授予他角色“查看活动角色”,其中只包含一个权限。

还有其他数据库设计/想法吗?建议?感谢

2 个答案:

答案 0 :(得分:1)

我相信你正在思考正确的轨道,这是一个很好的设计。

一个建议是,由于db组织得很好,尝试让用户只通过角色获得权限。如果有人想要直接获得许可,只需创建一个专门的角色。

与您提到的John Manager没有See Activity的示例一样:此See Activity权限可能与Observers相关,但Observers已比See Activity更强大的力量。在这种情况下,您的设计可让您自由地创建一个名为ActivityObservers的新角色,该角色具有See Activity的权限。这样John Manager可以同时包含ManagerActivityObservers

我相信你已经掌握了索引。运行一些场景来回答以下问题:John Manager离开时会发生什么?如何轻松说明John Manager具有哪些权限?任何表中都有Active标志吗?有一个是否有用?这样的活动标志可以帮助每个用户快速禁用帐户,角色或权限。

您是否需要一个审计表来告知通过角色向哪个用户授予何时以及具有哪些权限?如果是这样,基于触发器的审核可能会有所帮助。像Jim Manager这样的场景需要完全相同的权限John Manager - 这可以多快完成?

总的来说,你有一个好的概念!

答案 1 :(得分:0)

将较少的角色作为较大角色的子集是一个好主意。 这可以通过下面的SQL轻松确定

select count(permissions) from tblPermission where role='observer'

这将给出权限/权限的总数 角色成员有。同样的查询也适用于经理的角色

select count(permissions) from tblPermission where role='manager'

逻辑上,如果manager角色是观察者类的超类,那么 经理应该能够看到与观察者一样的活动。