Sql 用户角色权限查询

Sql 用户角色权限查询,sql,Sql,我有5个表:user>user\u has\u role>role>role\u has\u permission>permission 用户可以有0个或*个角色。 角色可以具有0或*权限 现在我有一个查询,它将获得属于某个用户的所有权限。 这项工作,但现在我想,如果用户的角色是“超级管理员”,那么所有权限都会加入。但是,如果不在表中指定它们,角色\u具有\u权限 这是一个问题: SELECT p.name,r.name role FROM user_has_ro

我有5个表:user>user\u has\u role>role>role\u has\u permission>permission

用户可以有0个或*个角色。 角色可以具有0或*权限

现在我有一个查询,它将获得属于某个用户的所有权限。 这项工作,但现在我想,如果用户的角色是“超级管理员”,那么所有权限都会加入。但是,如果不在表中指定它们,角色\u具有\u权限

这是一个问题:

SELECT        p.name,r.name role
FROM          user_has_role AS ur
JOIN          role AS r
ON            ur.role_id = r.id
JOIN          role_has_permission AS rp
ON            r.id = rp.role_id
LEFT JOIN     permission AS p
ON            rp.permission_id = p.id
WHERE         ur.user_id = [USER_ID]

你可以做一个工会:

SELECT        p.name,r.name role
FROM          user_has_role AS ur
JOIN          role AS r
ON            ur.role_id = r.id
JOIN          role_has_permission AS rp
ON            r.id = rp.role_id
LEFT JOIN     permission AS p
ON            rp.permission_id = p.id
WHERE         ur.user_id = [USER_ID]
UNION
   SELECT p.name, 'super_admin' 
   FROM permission 
   WHERE EXISTS (SELECT * FROM user_has_role, role 
              WHERE ur.user_id = [USER_ID] and role.role_id = user_has_role.role_id and             
              role.name = 'super_admin')

“这项工作,但现在我想,如果用户的角色是“超级管理员”,那么所有权限都会被加入”,这让人困惑,你能解释一下吗?谢谢它的工作!我不知道这是否是最好的解决方案,但它现在起作用了。我以后会做更多的研究