【SaaS - Export项目】11 - RBAC权限模型介绍,显示/隐式内连接查询用户的权限信息

本文介绍了基于角色的访问控制(RBAC)模型的基本概念及其实现方式,对比了普通用户权限设计与RBAC模型的区别,并详细阐述了RBAC权限设计的具体步骤及如何通过用户名称查询用户权限。

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

1. RBAC权限模型

RBAC(Role Based Access Control)是基于角色访问控制。
RBAC实际上就是针对产品去发掘需求时所用到的Who(角色)、What(拥有什么资源)、How(有哪些操作)的方式。
在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What进行How的操作。

2. RBAC的基本思想

就是授权给用户的访问权限,通常由用户在一个组织中担当的角色来确定。RBAC中将权限被授权给角色,角色被授权给用户,用户不直接与权限关联。RBAC对访问权限的授权由管理员统一管理,RBAC根据用户在组织内所处的角色作出访问授权与控制,授权规定是强加给用户的,用户不能自主地将访问权限传给他人,这是一种非自主型集中式访问控制方式。
案例理解:比如在医院中,医生这个角色可以给病人开处方,但他无权将开处方的权力传给其他人(护士、病人等)。

3. 普通用户权限设计

三个表(用户表、权限表、用户权限表)
在这里插入图片描述
这种直接将权限赋予给用户的情况,有以下缺点:

  1. 当用户变多的时候,会有大量的数据冗余(每个用户都有对应的权限存储在用户权限表)
  2. 添加和删除权限非常的麻烦(添加/删除权限,需要对拥有该权限的所有用户进行操作)

4. RBAC权限设计权限表

五个表(用户表、角色表、权限表、角色权限表、用户角色表)

角色与权限之间: 多对多关联。(产生一张角色权限中间表)
用户与角色之间:多对多关联。(产生一张用户角色中间表)

在这里插入图片描述

RABC权限模型的使用步骤

给用户授权的顺序

  1. 先给角色赋予权限
  2. 再将角色分配给用户
  3. 最后用户得到这些角色的所有权限

获取用户权限的顺序(如果想知道一个用户有什么权限,就反向查找

  1. 查找到该用户
  2. 查找该用户的角色
  3. 通过查询角色的权限,获得该用户的权限

分配权限步骤:从上往下
查找用户权限的步骤:从下往上

5. SaaS-Export的权限表设计

五个表(用户表、角色表、权限表、角色权限表、用户角色表)

角色与权限之间: 多对多关联。(产生一张角色权限中间表)
用户与角色之间:多对多关联。(产生一张用户角色中间表)

角色的本质就是一个集合,里面存放在着权限的名称。
给用户指定角色,其实就是将权限打包给用户。

在这里插入图片描述

6. 通过用户名称查询用户的权限(模块)

在这里插入图片描述

# 5张表的数据(笛卡尔集)
# 用户表
select * from pe_user;
# 角色表
select * from pe_role;
# 角色用户表(中间表) 得知 一个用户属于哪个角色
select * from pe_role_user;
# 权限表(功能表,模块表)
select * from ss_module;
# 角色权限表(中间表) 得知 一个角色有哪些权限
select * from pe_role_module;

select * from pe_user u,pe_role_user ru,pe_role r ;

查询用户 老王 的权限

  1. 显示内连接(推荐 inner join 比隐式内连接更快)
## 显示内连接
select m.name from pe_user u inner join pe_role_user ru inner join pe_role r inner join pe_role_module rm inner join ss_module m
on u.user_id = ru.user_id 
and ru.role_id = r.role_id 
and r.role_id =  rm.role_id
and rm.module_id = m.module_id
and u.user_name='老王'
  1. 隐式内连接(推荐,inner比)
## 隐式内连接
select m.name from pe_user u,pe_role_user ru,pe_role r,pe_role_module rm,ss_module m
where u.user_id = ru.user_id 
and ru.role_id = r.role_id 
and r.role_id =  rm.role_id
and rm.module_id = m.module_id
and u.user_name='老王'
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值