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

这篇博客介绍了如何在RBAC(Role-Based Access Control)模型中,通过SQL的LEFT JOIN和嵌套SELECT语句来获取用户对应的权限。内容涉及到三个核心表:用户表、角色表和权限表,并展示了它们之间的关系。查询结果虽然正确,但存在权限描述(permDesc)字段的重复问题,博主表示尚未解决去重的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值