From 8558ff726e660dbe5d18ffd5a500b3d5ea60a77e Mon Sep 17 00:00:00 2001 From: yang chen Date: Mon, 20 Oct 2025 16:00:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(datapermission):=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E8=A7=84?= =?UTF-8?q?=E5=88=99=E7=94=9F=E6=88=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 GreaterThan 表达式支持更灵活的条件构建 - 使用 FIND_IN_SET 函数替换原有的 IN 表达式实现 - 支持多部门 ID 的逐个条件拼接,提升查询准确性 -保留原有括号包装与 OR 连接逻辑确保语义一致 - 统一代码缩进风格增强可读性 --- .../rule/dept/DeptDataPermissionRule.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/jeelowcode-tool/tool-spring-boot-starter-biz-data-permission/src/main/java/com/jeelowcode/tool/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java b/jeelowcode-tool/tool-spring-boot-starter-biz-data-permission/src/main/java/com/jeelowcode/tool/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java index ace750d..d0571d4 100644 --- a/jeelowcode-tool/tool-spring-boot-starter-biz-data-permission/src/main/java/com/jeelowcode/tool/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java +++ b/jeelowcode-tool/tool-spring-boot-starter-biz-data-permission/src/main/java/com/jeelowcode/tool/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java @@ -19,6 +19,7 @@ import net.sf.jsqlparser.expression.*; import net.sf.jsqlparser.expression.operators.conditional.OrExpression; import net.sf.jsqlparser.expression.operators.relational.EqualsTo; import net.sf.jsqlparser.expression.operators.relational.ExpressionList; +import net.sf.jsqlparser.expression.operators.relational.GreaterThan; import net.sf.jsqlparser.expression.operators.relational.InExpression; import javax.annotation.Resource; @@ -140,17 +141,17 @@ public class DeptDataPermissionRule implements DataPermissionRule { return customDeptExpression; } - if(Objects.nonNull(deptExpression) && Objects.nonNull(userExpression) && Objects.nonNull(customDeptExpression)){ + if (Objects.nonNull(deptExpression) && Objects.nonNull(userExpression) && Objects.nonNull(customDeptExpression)) { // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即,WHERE (dept_id IN ? OR user_id = ?) return new Parenthesis(new OrExpression(new OrExpression(deptExpression, userExpression), customDeptExpression)); } - if(Objects.nonNull(deptExpression) && Objects.nonNull(userExpression)){ + if (Objects.nonNull(deptExpression) && Objects.nonNull(userExpression)) { // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即,WHERE (dept_id IN ? OR user_id = ?) return new Parenthesis(new OrExpression(deptExpression, userExpression)); } - if(Objects.nonNull(deptExpression)){ + if (Objects.nonNull(deptExpression)) { // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即,WHERE (dept_id IN ? OR user_id = ?) return new Parenthesis(new OrExpression(deptExpression, customDeptExpression)); } @@ -195,12 +196,16 @@ public class DeptDataPermissionRule implements DataPermissionRule { Expression returnExpression = null; String[] columnNames = columnName.split(","); for (String column : columnNames) { - Expression deptExpression = new InExpression(MyBatisUtils.buildColumn(tableName, tableAlias, column), - new ExpressionList(CollectionUtils.convertList(deptIds, LongValue::new))); - if (Objects.isNull(returnExpression)) { - returnExpression = deptExpression; - } else { - returnExpression = new Parenthesis(new OrExpression(returnExpression, deptExpression)); + for (Long deptId : deptIds) { + Expression deptExpression = new GreaterThan() + .withLeftExpression(new Function().withName("FIND_IN_SET") + .withParameters(new ExpressionList(new StringValue(deptId.toString()), MyBatisUtils.buildColumn(tableName, tableAlias, column)))) + .withRightExpression(new LongValue(0)); + if (Objects.isNull(returnExpression)) { + returnExpression = deptExpression; + } else { + returnExpression = new Parenthesis(new OrExpression(returnExpression, deptExpression)); + } } } return returnExpression;