一个简单的RBAC模型需要三张表:用户表、角色表、权限表。
简化一下,这三个表分别为如下结构(及示例数据)
- 用户表(user)
- 角色表(role)
- 权限表(permission)
它们之间的关系如图所示
要求生成一个用户对应的权限,这里要使用嵌套SELECT语句。其中,用户表要和角色、权限LEFT JOINT运算后的结果(d表)再做LEFT JOIN运算
SELECT
u.id,
u.`name`,
GROUP_CONCAT( d.perms ) AS `permDesc`
FROM
y_user u
LEFT JOIN (
SELECT
r.rid,
GROUP_CONCAT( p.CODE ) AS perms
FROM
y_role r
LEFT JOIN y_permission p ON FIND_IN_SET( p.pid, r.permIds )
GROUP BY
r.rid
) d ON FIND_IN_SET( d.rid, u.roleIds )
GROUP BY
u.id
查询结果为
小遗憾:
可以看出,生成的permDesc字段会有重复,本人还不会去重。