1. 升级 1.3.0-snapshot 版本

2.【修复】biz-data-permission 组件的缓存机制,导致部分 SQL 未进行数据过滤
This commit is contained in:
YunaiV
2021-12-16 07:19:52 +08:00
parent abf61bfdea
commit a92acff99b
5 changed files with 28 additions and 22 deletions

View File

@ -369,6 +369,11 @@ public class DataPermissionDatabaseInterceptor extends JsqlParserSupport impleme
if (!rule.getTableNames().contains(table.getName())) {
continue;
}
// 如果有匹配的规则,说明可重写。
// 为什么不是有 allExpression 非空才重写呢?在生成 column = value 过滤条件时,会因为 value 不存在,导致未重写。
// 这样导致第一次无 value被标记成无需重写但是第二次有 value此时会需要重写。
ContextHolder.setRewrite(true);
// 单条规则的条件
String tableName = MyBatisUtils.getTableName(table);
Expression oneExpress = rule.getExpression(tableName, table.getAlias());
@ -377,10 +382,6 @@ public class DataPermissionDatabaseInterceptor extends JsqlParserSupport impleme
: new AndExpression(allExpression, oneExpress);
}
// 如果条件非空,说明已经重写了
if (allExpression != null) {
ContextHolder.setRewrite(true);
}
return allExpression;
}
@ -393,7 +394,7 @@ public class DataPermissionDatabaseInterceptor extends JsqlParserSupport impleme
if (ContextHolder.getRewrite()) {
return;
}
// 重写,进行添加
// 重写,进行添加
mappedStatementCache.addNoRewritable(ms, ContextHolder.getRules());
}