ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java
@@ -7,7 +7,7 @@ * * @author Lion Li */ @Target(ElementType.METHOD) @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface DataPermission { ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java
@@ -1,16 +1,9 @@ package com.ruoyi.demo.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.ruoyi.common.annotation.DataColumn; import com.ruoyi.common.annotation.DataPermission; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import com.ruoyi.demo.domain.TestTree; import org.apache.ibatis.annotations.Param; import java.io.Serializable; import java.util.Collection; import java.util.List; /** * 测试树表Mapper接口 @@ -18,26 +11,10 @@ * @author Lion Li * @date 2021-07-26 */ @DataPermission({ @DataColumn(key = "deptName", value = "dept_id"), @DataColumn(key = "userName", value = "user_id") }) public interface TestTreeMapper extends BaseMapperPlus<TestTree> { @Override @DataPermission({ @DataColumn(key = "deptName", value = "dept_id"), @DataColumn(key = "userName", value = "user_id") }) List<TestTree> selectList(@Param(Constants.WRAPPER) Wrapper<TestTree> queryWrapper); @Override @DataPermission({ @DataColumn(key = "deptName", value = "dept_id"), @DataColumn(key = "userName", value = "user_id") }) int updateById(@Param(Constants.ENTITY) TestTree entity); @Override @DataPermission({ @DataColumn(key = "deptName", value = "dept_id"), @DataColumn(key = "userName", value = "user_id") }) int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); } ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java
@@ -17,6 +17,7 @@ import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Parenthesis; import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import org.springframework.context.expression.BeanFactoryResolver; @@ -60,10 +61,12 @@ } try { Expression expression = CCJSqlParserUtil.parseExpression(dataFilterSql); // 数据权限使用单独的括号 防止与其他条件冲突 Parenthesis parenthesis = new Parenthesis(expression); if (ObjectUtil.isNotNull(where)) { return new AndExpression(where, expression); return new AndExpression(where, parenthesis); } else { return expression; return parenthesis; } } catch (JSQLParserException e) { throw new ServiceException("数据权限解析异常 => " + e.getMessage()); @@ -126,12 +129,18 @@ List<Method> methods = Arrays.stream(ClassUtil.getDeclaredMethods(clazz)) .filter(method -> method.getName().equals(methodName)).collect(Collectors.toList()); DataPermission dataPermission; // 获取方法注解 for (Method method : methods) { if (AnnotationUtil.hasAnnotation(method, DataPermission.class)) { dataPermission = AnnotationUtil.getAnnotation(method, DataPermission.class); return dataPermission.value(); } } // 获取类注解 if (AnnotationUtil.hasAnnotation(clazz, DataPermission.class)) { dataPermission = AnnotationUtil.getAnnotation(clazz, DataPermission.class); return dataPermission.value(); } return null; } }