用户自己的权限和组权限的用户权限

时间:2016-09-13 13:52:05

标签: mysql sql database

我正在开发用户权限系统,这是我的用途

enter image description here

每个用户都可以拥有以下权限:

  • 他是一个团体的成员,该团体有权限
  • 他在user_permission
  • 中有记录

因此,为了获得用户拥有的所有权限,我必须获得用户所属的组权限的联合,以及用户在user_permission表中的权限

我找到的sql语句作为解决方案,但我不知道它是否是好的,(我可以只使用一个SELECT语句得到结果)

选择声明:

SELECT p.name FROM permission p
JOIN group_permission as gp ON gp.permission_id = p.id
JOIN `group` as g ON g.id = gp.group_id
JOIN `user_group` as ug ON ug.group_id = g.id
where ug.user_id = 5

UNION

SELECT p.name FROM permission p
JOIN `user_permission` as up ON up.permission_id = p.id
where up.user_id = 5

这是我的数据库的mysql转储:

https://pastebin.com/2Kaq8fVs

1 个答案:

答案 0 :(得分:1)

第3行不是必需的。您可以通过gp加入uggroup_id。保留group表以保护外键,但是您不需要它来进行此类查询。正如您所描述的那样,其他所有内容都符合您的要求。

注意:读取所有权限而不定期重新加载它们会导致应用程序无法识别更改的权限。如果这是一个问题,您还可以使用特定权限约束您的查询。