Ruoyi | AOP 类DataScopeAspect 的分析

目录

一:数据权限展示

二、数据权限作用及操作 

1. 数据权限作用

2. 数据权限操作

三、数据权限后端源码分析 

Controller

Service

​Mapper

确定接口和相关代码:

四、总结 


一:数据权限展示

进入方式:系统管理 -> 角色管理 -> 数据权限

二、数据权限作用及操作 

1. 数据权限作用

用户管理:不同用户看到的用户数据有差别

用户admin可以看到的数据如下 

而用户ry能看到的数据为

角色管理:不同用户看到的角色数据有差别

用户admin 的角色为超级管理员,超级管理员设置为具有访问全部数据权限

用户ry 的角色为普通角色,普通角色设置为只有访问本部门数据权限,其所属部门为测试部门 

2. 数据权限操作

登录用户admin 进行如下操作:

用户admin 的角色为超级管理员,超级管理员设置为具有访问全部数据权限

用户ry 的角色为普通角色,普通角色设置为只有访问本部门数据权限,其所属部门为测试部门

  

三、数据权限后端源码分析 


Controller

Service


Mapper


Java Mapper

xml Mapper

若依在进行数据权限的访问时,Mapper层中对数据进行处理,根据用户角色的权限对数据进行过滤。倒数第二行${params.dataScope}就是对数据范围进行过滤。

确定接口和相关代码:


函数调用链:doBefore -> handleDataScope -> dataScopeFilter 添加SQL 语句

AOP 类DataScopeAspect 处理注解@DataScope 

根据当前登录用户的信息,判断是否为超级管理员,如果不是,则调用dataScopeFilter方法进行数据权限过滤。这种机制通常用于确保只有非管理员用户才会受到数据权限的约束,管理员用户可以访问所有数据。 

AOP 类DataScopeAspect 对于全部权限、自定义权限、本部门及以下权限、仅本人权限最终添加的SQL 语句及作用

全部权限--SQL语句:""(空字符串)
作用:表示用户具有全部数据的访问权限,不需要添加任何过滤条件,即不进行数据权限的过滤。

自定义权限--SQL语句:动态生成类似 OR d.dept_id IN (SELECT dept_id FROM sys_role_dept WHERE role_id = X) 的条件,X为角色ID。
作用:根据用户的角色,查询出与该角色相关的部门数据,仅允许用户访问与这些部门相关的数据。

本部门权限--SQL语句:动态生成类似 OR d.dept_id = X 的条件,X为用户所属部门ID。
作用:限制用户只能访问自己所在部门的数据,不包括子部门的数据。

本部门及以下权限--SQL语句:动态生成类似 OR d.dept_id IN (SELECT dept_id FROM sys_dept WHERE dept_id = X or find_in_set(X, ancestors)) 的条件,X为用户所属部门ID。
作用:允许用户访问自己所在部门及其所有子部门的数据。

仅本人权限--SQL语句:动态生成类似 OR u.user_id = X 的条件,X为用户ID。
作用:限制用户只能访问自己的数据。

四、总结 

数据权限限制的总体逻辑:
1.Controller 
2.Service 上的注解@DataScope
3.监测@DataScope 的切面类DataScopeAspect [给继承BaseEntity 的子类属性params 添加SQL ]
4. Service
5.Java Mapper
6.xml Mapper [通过子类属性params 使用SQL 语句过滤数据]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值