目录
四、@DataScope 和 ${params.dataScope}
前言
AOP(Aspect Oriented Programming)是一种面向切面的编程思想。面向切面编程是将程序抽象成各个切面,即解剖对象的内部,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性。
Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的一个核心功能,用于在应用程序中实现横切关注点(cross-cutting concerns)的模块化。在传统的面向对象编程(OOP)中,横切关注点(如日志记录、性能监控、事务管理、安全控制等)往往散布在整个代码库中,导致代码的复用性和可维护性下降。
Spring AOP 中关键概念:
1、切面(Aspect):
切面是描述横切关注点的模块。它封装了影响多个类的行为。在Spring中,切面通常是由带有@Aspect注解的类来表示。
2、连接点(JoinPoint):
连接点是在程序执行过程中某个特定的点,如方法调用或异常抛出。AOP允许在这些连接点上添加行为。
3、通知(Advice):
通知是切面在特定的连接点上执行的动作。
4、切入点(Pointcut):
切入点是一个或多个连接点的集合,用于定义通知应该在何处插入。Spring AOP使用表达式语言来定义切入点。
5、代理(Proxy):
代理是Spring AOP为受保护的对象创建的包装器。当应用程序调用目标对象时,实际上是调用了代理,后者再调用目标对象的方法,并在调用前后添加额外的行为。
6、目标对象(Target Object):
目标对象是被一个或多个切面所通知的对象。在Spring AOP中,这通常是一个被代理的对象。
一、 数据权限展示
在RuoYi中通过角色进行权限分配,包括菜单权限,数据权限等。
通过角色管理可以给角色添加不同的数据权限

二、数据权限作用及操作
使用数据权限,我们可以让不同的角色可以访问的数据得到控制,实现用户只能看到自己部门数据的功能。以下举例:

查看普通角色ruoyi的数据权限可以知道角色只有访问测试部门的权限

admin用户看到的数据范围

ry用户看到的数据范围

三、数据权限业务代码分析
1、Controller层
在 SysUserController.java 中我们可以找到 /list 接口 ,在 /list 接口接受 HTTP GET 请求的时候,系统首先会进行权限验证,查看请求用户是否带有 system:user:list 权限字段。权限通过,系统会执行查询并将结果放入 TableDataInfo 返回。

2、Service层
ISysUserService.java

SysUserServiceImpl.java

3、Mapper层
SysUserMapper.java

${params.dataScope} 对数据范围进行过滤,获取需要的数据。

四、@DataScope 和 ${params.dataScope}
@DataScope 定义

AOP类 DataScopeAspect 处理注解 @DataScope

系统根据当前登录用户来判断是否为超级管理员 ,如果不是,则调用 dataScopeFilter 进行数据过滤,确保他们的数据访问范围。

权限过滤方法dataScopeFilter 的具体操作



总结
在RuoYi中使用Spring Aop 动态拦截方法处理数据权限,通过自定义注解 @DataScope 标记了需要权限控制的方法,使用切面配置动态修改SQL查询条件。减少了数据权限操作的耦合性,简化了业务流程,动态处理查询,动态控制数据的访问范围,更加的灵活且高效。
802

被折叠的 条评论
为什么被折叠?



