用户、角色、权限和特定组 RBAC?

Posted

技术标签:

【中文标题】用户、角色、权限和特定组 RBAC?【英文标题】:user, role, permissions and a specific group RBAC? 【发布时间】:2018-06-21 13:14:57 【问题描述】:

我正在尝试为使用 mysql 作为数据库的项目设计数据库模式。我卡在授权部分,业务规则如下:

    一个角色可以有多个权限,一个权限又可以插入多个角色中 一个用户可以有多个角色,一个角色可以分配给多个用户 现在这是无法正确处理的部分,每个用户都可以在许多“组”中,但在每个用户中,他只能分配给一个角色(组是指一组人,而不是一组角色)

下面的图片是我到现在才想出来的,应该修改什么?

【问题讨论】:

能否在不“通过”组的情况下为用户分配角色?前任。组管理员 == 角色管理员。用户可以在没有组管理员的情况下拥有角色管理员吗?如果用户必须在与角色对应的组中,请将组链接到 1 个角色,并添加一个 group_has_user 表。删除 role_has_user。 @Nic3500,不,用户必须有一个角色,但不一定是一个组。所以管理员将有一个角色管理员,但不会有管理员组。 @Pomanh Group 权限这部分怎么样 【参考方案1】:

根据您对我的评论的提问和回答,这是我想出的模型:

这符合您的要求。与您的模型的主要区别在于组的设置方式。

Group 与 Role 具有 1:1 的关系,可以为 null(即,即使没有与任何角色关联的组也可以存在)。 在每个组中,您都有一个指向角色表的外键。 如果您需要了解用户拥有的角色:通过 User_has_Role 的单个角色 + 附加到用户所属的每个组的角色(通​​过 Group_has_User)。

【讨论】:

这实际上是一个有趣的答案,但是,虽然我接受了解释,但布局与它不同步。我的意思是你说一个 1 组有很多我同意的角色,但图表显示相反(即 1 个角色有很多组)......也应该有可能让外部组键为空,修改在图表中,我会接受你的回答 所做的修改。 为什么要改为 1:1 关系?我认为它有问题。就好像你说每个组如果存在只能有一个角色(我最初的要求是每个用户在一个组中都有一个角色),所以根据你的提议,我期望以下 Role(id, name, group_id = >nullable) 和 Group (id, name) 具有关系 Group(0):Role(N) 您最初的帖子说“每个用户都可以在许多“组”中,但在每个组中他只能分配一个角色”。这就是为什么我理解一组 == 一个角色。但此时,欢迎您根据实际项目的需要进行调整。【参考方案2】:

每个组可以有一个包含用户和有效角色的表(因为一个组中的用户只能有一个角色)。还有一个特定于实现的缺陷,如果用户可以在多个组中并且在一个组中他只能拥有一个角色,因此必须有一些规定来为用户决定有效组,这将为用户决定有效角色。 如果用户与组的关系只是决定用户可以拥有角色的因素,那么用户和角色之间没有直接关系。

【讨论】:

对于您的第一点,每个组的表格:这将不适用,因为组可能会意外增加。对于第三点,一个群体意味着一个角色情境:这里不是这样的。最后我不明白什么是实现缺陷,你能举一个你看到的正确实现的例子吗?

以上是关于用户、角色、权限和特定组 RBAC?的主要内容,如果未能解决你的问题,请参考以下文章

[Linux之权限管理⽤户组管理]

Djang之基于角色的权限控制(RBAC)

什么是RBAC?

简单设计一个RBAC权限权限模型

简单设计一个RBAC权限权限模型

简单设计一个RBAC权限权限模型