目录
四、AOP 类DataScopeAspect 处理注解@DataScope
本文以RuoYi-Vue的数据权限控制功能为例,介绍Spring AOP(Aspect Oriented Programming 面向切面编程)部分内容。
一、数据权限展示
如下图所示,进入分配数据权限页面。
在该界面,可以为角色添加不同的数据权限,实现数据管理。
二、数据权限作用及操作
使用数据权限,我们可以让具有不同权限的用户看到的数据有差别,我们进行如下操作来对比说明。
- 用户admin 的角色为超级管理员,超级管理员设置为具有访问全部数据权限
- 用户ry 的角色为普通角色,普通角色设置为只有访问本部门数据权限,其所属部门为测试部门
分别使用超级管理员账号admin及普通用户ry登录查看二者可以看到的数据有何区别。
三、数据权限后端代码分析
controller层
因为是用户数据权限控制,所以我们找到SysUserController.java
这段代码在接收到 HTTP GET 请求 /list
时,首先检查当前用户是否具有执行system:users:list
的权限,然后执行用户列表的查询操作,并将查询结果封装成 TableDataInfo
对象返回。
Service层
SysUserServiceImpl.java
Mapper层
SysUserMapper.java
${params.dataScope}对数据范围进行过滤。
四、AOP 类DataScopeAspect 处理注解@DataScope
@DataScope注解
最后是AOP 类DataScopeAspect 处理注解@DataScope
根据当前登录用户的信息,判断是否为超级管理员,如果不是,则调用dataScopeFilter
方法进行数据权限过滤。这种机制通常用于确保只有非管理员用户才会受到数据权限的约束,管理员用户可以访问所有数据。
接下来是AOP 类DataScopeAspect 对于全部权限、自定义权限、本部门及以下权限、仅本人权限最终添加的SQL 语句及作用
此切面在目标方法执行前会拦截,检查用户的角色和数据权限配置,然后根据不同的权限类型生成相应的SQL条件。