【问题标题】:user role permission query用户角色权限查询
【发布时间】:2011-11-17 23:25:36
【问题描述】:

我有 5 个表:用户 > user_has_role > 角色 > role_has_permission > 权限

一个用户可以有 0 或 * 个角色。 并且一个角色可以有 0 或 * 权限

现在我有一个查询,它将获取属于用户的所有权限。 这项工作,但现在我希望如果用户具有“super_admin”角色,那么所有权限都会加入。但没有在表 role_has_permission 中指定它们。

这是查询:

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]

【问题讨论】:

  • " 这项工作,但现在我希望如果用户具有“super_admin”角色,那么所有权限都会加入“,这令人困惑,你能解释一下吗?

标签: sql


【解决方案1】:

你可以做一个联合:

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')

【讨论】:

  • 感谢它的工作!不知道这是否是最好的解决方案,但它现在有效。我稍后会做更多的研究
猜你喜欢
  • 1970-01-01
  • 2015-11-26
  • 2018-11-18
  • 2023-02-14
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 2011-06-25
相关资源
最近更新 更多