我正在开发用户权限系统,这是我的用途
每个用户都可以拥有以下权限:
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转储:
答案 0 :(得分:1)
第3行不是必需的。您可以通过gp
加入ug
和group_id
。保留group
表以保护外键,但是您不需要它来进行此类查询。正如您所描述的那样,其他所有内容都符合您的要求。
注意:读取所有权限而不定期重新加载它们会导致应用程序无法识别更改的权限。如果这是一个问题,您还可以使用特定权限约束您的查询。