RuoYi中关于AOP 类DataScopeAspect的分析

目录

一、用户数据权限展示

二、数据权限作用及操作

1. 数据权限作用

2. 数据权限操作

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

1.Controller 和Servcie

2.Java Mapper 和xml Mapper

3.相关代码

四、总结


一、用户数据权限展示

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

二、数据权限作用及操作

1. 数据权限作用

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

用户admin可以看到:

用户ry可以看到:

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

用户admin可以看到:

用户ry可以看到:

2. 数据权限操作

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

用户 admin 的角色为超级管理员 ,超级管理员设置为具有访问全部数据权限
用户 ry 的角色为普通角色 ,普通角色设置为只有访问本部门数据权限,其所属部门为测试部门

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

1.Controller Servcie

部门别名和用户别名用在sql语句中

需要跟SQL 语句给部门和用户表名的别名保持一致

2.Java Mapper xml Mapper

若依在进行数据权限的访问时,Mapper层中对数据进行处理,根据用户角色的权限对数据进行过滤。

${params.dataScope}的作用就是对数据范围进行过滤。

3.相关代码

AOP 类DataScopeAspect处理注解@DataScope:

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

四、总结

最终添加的sql语句及作用:

全部权限:空字符串。用户具有全部数据的访问权限。

自定义权限:OR d.dept_id IN (SELECT dept_id FROM sys_role_dept WHERE role_id = X) 。

根据用户的角色,查询出与该角色相关的部门数据,仅允许用户访问与这些部门相关的数据。

本部门及以下权限:OR d.dept_id IN (SELECT dept_id FROM sys_dept WHERE dept_id = X or find_in_set(X, ancestors)) 。允许用户访问自己所在部门及其所有子部门的数据。

仅本人权限:OR u.user_id = X 。限制用户只能访问自己的数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值