若依数据权限控制
效果
新建用户
表结构
- sys_role_dept 这张表的存在。是为了实现
数据权限自定义
的功能
service层
mapper层
流程
自定义注解DataScope
切面类
- 防止sql注入
- 数据过滤
前置通知
// 切面的前置通知@Before("@annotation(controllerDataScope)")public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable{// 清除数据范围参数,防止注入clearDataScope(point);// 处理数据范围过滤逻辑handleDataScope(point, controllerDataScope);}
方法clearDataScope
防止SQL注入
/*** 拼接权限 SQL 前先清空 params.dataScope 参数防止注入** @param joinPoint 切点*/private void clearDataScope(final JoinPoint joinPoint){// 获取切点的第一个参数,该参数应为 BaseEntity 类型Object params = joinPoint.getArgs()[0];if (StringUtils.isNotNull(params) && params instanceof BaseEntity){// 将参数转换为 BaseEntity 类型并清空 dataScope 参数BaseEntity baseEntity = (BaseEntity) params;baseEntity.getParams().