再会。
我有一个基于角色的访问控制数据库,正在寻找一种有效的方法来获取用户拥有的所有权限。这是原理图:
现在,我需要以最(可能)最有效的方式获得所有用户的许可。试过这个查询:
SELECT p.name
FROM permission p
WHERE p.id = (
SELECT rpl.permission_id
FROM role_permission_list rpl
WHERE rpl.role_id = (
SELECT url.role_id
FROM user_role_list url
WHERE url.user_id = 2
)
)
但这失败了。由于子查询返回了1个以上的结果。试图考虑加入-无法解决。
提前致谢。
PS:将来会有一个Permission_overrides表,因为一个独立的访问控制实体可能具有排他的权限集。
这将是简单的3个联接,例如:
SELECT
`user`.id,
permission.*
FROM
`user`
LEFT JOIN user_role_list ON `user`.id=user_role_list.user_id
LEFT JOIN role_permission_list ON user_role_list.role_id=role_permission_list.role_id
LEFT JOIN permission ON role_permission_list.permission_id=permission.id
WHERE
`user`.id=$user_id
(由于您不是要查找来自特定权限的角色描述,因此我没有包括要查询的表)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句