From e6b45d4cdbab85f26514911090420f1f39474b92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Thu, 16 Dec 2021 10:54:44 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=E6=94=AF=E6=8C=81=E7=B1=BB=E6=A0=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/annotation/DataPermission.java | 2 +- .../com/ruoyi/demo/mapper/TestTreeMapper.java | 31 +++---------------- .../handler/PlusDataPermissionHandler.java | 13 ++++++-- 3 files changed, 16 insertions(+), 30 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java index e04b23696..128a1f4e9 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java @@ -7,7 +7,7 @@ import java.lang.annotation.*; * * @author Lion Li */ -@Target(ElementType.METHOD) +@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface DataPermission { diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java index 388095009..0a7936cfe 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java +++ b/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 @@ import java.util.List; * @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 { - @Override - @DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }) - List selectList(@Param(Constants.WRAPPER) Wrapper 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 idList); } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java index f3e32078d..5bcb86898 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java @@ -17,6 +17,7 @@ import com.ruoyi.common.utils.spring.SpringUtils; 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 @@ public class PlusDataPermissionHandler { } 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 @@ public class PlusDataPermissionHandler { List 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; } }