在权限控制模型(RBAC)中使用SQL语句获取用户权限码

一个简单的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字段会有重复,本人还不会去重。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值