@DataScope 注解处理的内容叫做数据权限,就是说你这个用户登录后能够访问哪些数据。传统的做法就是根据当前认证用户的 id 或者角色或者权限等信息去查询,但是这种做法比较麻烦比较费事,每次查询都要写大量 SQL,而这些 SQL 中又有大量雷同的地方,所以我们希望能够将之进行统一处理,进而就引出了 @DataScope 注解。
在若依框架里面
数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)
要实现通过一个注解,注解里面的不同的值就可以实现查询不同的数据,主要的功能就是动态的拼接sql,因为我们要查询数据的时候,主要是xml里面写sql语句,但是现在要求根据不同的角色动态的查询出不同的数据,所以我们需要在代码里面自己拼接一个sql语句,将这个sql语句传到xml里面,就可以实现动态的查询了,但是这个sql语句,在代码里面咋弄出来。
这个时候就使用注解了,这个注解的作用就是生成动态的sql语句,将这个sql语句存放到实体类里面,因为我们在mapper层的接口方法的参数是实体类,在xml里面接收这个接口的参数,在xml里面获取参数里面的东西,所以我们需要将生成的动态的sql语句放到实体类里面。
怎么放?
如果要实现这个功能,我们需要看哪些文件?
1 自定义注解
2 aop功能扩展
3 在你需要的实现数据权限的接口的service层加上这个注解
4 xml里面获取
${params.dataScope}
通过这个就是获取到一个动态的sql语句
以上就是这个功能实现的大体流程,具体的逻辑就在上面的文件里面的具体代码了
每一个涉及到的文件里面代码什么意思,已经写好注释了
1 注解
/**
* 数据权限过滤注解
*
* @author jing
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataScope
{
/**
* 部门表的别名
*/
public String deptAlias() default "";
/**
* 用户表的别名
*/
public String userAlias() default "";
}
2 aop代码
package com.ruoyi.framework.aspectj;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.entity.SysRole;
import