Commit afa3e6dc9623ab17617c61dc63551e27bcd8eeb2

Authored by 芋道源码
Committed by Gitee
2 parents 05a6c606 766b74f0

!328 fix: SQL 条件表达式缺少括号问题

Merge pull request !328 from 与或非/issues/I5SIJU
yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
8 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 8 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
9 import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule; 9 import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule;
  10 +import cn.iocoder.yudao.framework.expression.OrExpressionX;
10 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 11 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
11 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; 12 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
12 import cn.iocoder.yudao.framework.security.core.LoginUser; 13 import cn.iocoder.yudao.framework.security.core.LoginUser;
@@ -20,7 +21,6 @@ import net.sf.jsqlparser.expression.Alias; @@ -20,7 +21,6 @@ import net.sf.jsqlparser.expression.Alias;
20 import net.sf.jsqlparser.expression.Expression; 21 import net.sf.jsqlparser.expression.Expression;
21 import net.sf.jsqlparser.expression.LongValue; 22 import net.sf.jsqlparser.expression.LongValue;
22 import net.sf.jsqlparser.expression.NullValue; 23 import net.sf.jsqlparser.expression.NullValue;
23 -import net.sf.jsqlparser.expression.operators.conditional.OrExpression;  
24 import net.sf.jsqlparser.expression.operators.relational.EqualsTo; 24 import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
25 import net.sf.jsqlparser.expression.operators.relational.ExpressionList; 25 import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
26 import net.sf.jsqlparser.expression.operators.relational.InExpression; 26 import net.sf.jsqlparser.expression.operators.relational.InExpression;
@@ -143,8 +143,8 @@ public class DeptDataPermissionRule implements DataPermissionRule { @@ -143,8 +143,8 @@ public class DeptDataPermissionRule implements DataPermissionRule {
143 if (userExpression == null) { 143 if (userExpression == null) {
144 return deptExpression; 144 return deptExpression;
145 } 145 }
146 - // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即,WHERE dept_id IN ? OR user_id = ?  
147 - return new OrExpression(deptExpression, userExpression); 146 + // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即,WHERE (dept_id IN ? OR user_id = ?)
  147 + return new OrExpressionX(deptExpression, userExpression);
148 } 148 }
149 149
150 private Expression buildDeptExpression(String tableName, Alias tableAlias, Set<Long> deptIds) { 150 private Expression buildDeptExpression(String tableName, Alias tableAlias, Set<Long> deptIds) {
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/expression/AndExpressionX.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.expression;
  2 +
  3 +import net.sf.jsqlparser.expression.Expression;
  4 +import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
  5 +
  6 +/**
  7 + * AndExpression 的扩展类(会在原有表达式两端加上括号)
  8 + */
  9 +public class AndExpressionX extends AndExpression {
  10 +
  11 + public AndExpressionX() {
  12 + }
  13 +
  14 + public AndExpressionX(Expression leftExpression, Expression rightExpression) {
  15 + this.setLeftExpression(leftExpression);
  16 + this.setRightExpression(rightExpression);
  17 + }
  18 +
  19 + @Override
  20 + public String toString() {
  21 + return "(" + super.toString() + ")";
  22 + }
  23 +
  24 +}
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/expression/OrExpressionX.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.expression;
  2 +
  3 +import net.sf.jsqlparser.expression.Expression;
  4 +import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
  5 +
  6 +/**
  7 + * OrExpression 的扩展类(会在原有表达式两端加上括号)
  8 + */
  9 +public class OrExpressionX extends OrExpression {
  10 +
  11 + public OrExpressionX() {
  12 + }
  13 +
  14 + public OrExpressionX(Expression leftExpression, Expression rightExpression) {
  15 + this.setLeftExpression(leftExpression);
  16 + this.setRightExpression(rightExpression);
  17 + }
  18 +
  19 + @Override
  20 + public String toString() {
  21 + return "(" + super.toString() + ")";
  22 + }
  23 +
  24 +}