|
@@ -1,14 +1,14 @@
|
|
|
package com.citu.framework.datapermission.core.db;
|
|
package com.citu.framework.datapermission.core.db;
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
-import com.citu.framework.common.util.collection.SetUtils;
|
|
|
|
|
-import com.citu.framework.datapermission.core.rule.DataPermissionRule;
|
|
|
|
|
-import com.citu.framework.datapermission.core.rule.DataPermissionRuleFactory;
|
|
|
|
|
-import com.citu.framework.mybatis.core.util.MyBatisUtils;
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
|
|
|
import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
|
|
import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
|
|
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
|
|
|
|
|
+import com.citu.framework.common.util.collection.SetUtils;
|
|
|
|
|
+import com.citu.framework.datapermission.core.rule.DataPermissionRule;
|
|
|
|
|
+import com.citu.framework.datapermission.core.rule.DataPermissionRuleFactory;
|
|
|
|
|
+import com.citu.framework.mybatis.core.util.MyBatisUtils;
|
|
|
import lombok.Getter;
|
|
import lombok.Getter;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import net.sf.jsqlparser.expression.*;
|
|
import net.sf.jsqlparser.expression.*;
|
|
@@ -36,7 +36,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
|
|
/**
|
|
/**
|
|
|
* 数据权限拦截器,通过 {@link DataPermissionRule} 数据权限规则,重写 SQL 的方式来实现
|
|
* 数据权限拦截器,通过 {@link DataPermissionRule} 数据权限规则,重写 SQL 的方式来实现
|
|
|
* 主要的 SQL 重写方法,可见 {@link #builderExpression(Expression, List)} 方法
|
|
* 主要的 SQL 重写方法,可见 {@link #builderExpression(Expression, List)} 方法
|
|
|
- *
|
|
|
|
|
|
|
+ * <p>
|
|
|
* 整体的代码实现上,参考 {@link com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor} 实现。
|
|
* 整体的代码实现上,参考 {@link com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor} 实现。
|
|
|
* 所以每次 MyBatis Plus 升级时,需要 Review 下其具体的实现是否有变更!
|
|
* 所以每次 MyBatis Plus 升级时,需要 Review 下其具体的实现是否有变更!
|
|
|
*
|
|
*
|
|
@@ -449,7 +449,7 @@ public class DataPermissionDatabaseInterceptor extends JsqlParserSupport impleme
|
|
|
* 处理条件
|
|
* 处理条件
|
|
|
*
|
|
*
|
|
|
* @param currentExpression 当前 where 条件
|
|
* @param currentExpression 当前 where 条件
|
|
|
- * @param tables 多个表
|
|
|
|
|
|
|
+ * @param tables 多个表
|
|
|
*/
|
|
*/
|
|
|
protected Expression builderExpression(Expression currentExpression, List<Table> tables) {
|
|
protected Expression builderExpression(Expression currentExpression, List<Table> tables) {
|
|
|
// 没有表需要处理直接返回
|
|
// 没有表需要处理直接返回
|
|
@@ -507,7 +507,7 @@ public class DataPermissionDatabaseInterceptor extends JsqlParserSupport impleme
|
|
|
|
|
|
|
|
// 单条规则的条件
|
|
// 单条规则的条件
|
|
|
Expression oneExpress = rule.getExpression(tableName, table.getAlias());
|
|
Expression oneExpress = rule.getExpression(tableName, table.getAlias());
|
|
|
- if (oneExpress == null){
|
|
|
|
|
|
|
+ if (oneExpress == null) {
|
|
|
continue;
|
|
continue;
|
|
|
}
|
|
}
|
|
|
// 拼接到 allExpression 中
|
|
// 拼接到 allExpression 中
|
|
@@ -582,7 +582,7 @@ public class DataPermissionDatabaseInterceptor extends JsqlParserSupport impleme
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 指定数据权限规则,对指定 MappedStatement 无需重写(不生效)的缓存
|
|
* 指定数据权限规则,对指定 MappedStatement 无需重写(不生效)的缓存
|
|
|
- *
|
|
|
|
|
|
|
+ * <p>
|
|
|
* value:{@link MappedStatement#getId()} 编号
|
|
* value:{@link MappedStatement#getId()} 编号
|
|
|
*/
|
|
*/
|
|
|
@Getter
|
|
@Getter
|
|
@@ -592,7 +592,7 @@ public class DataPermissionDatabaseInterceptor extends JsqlParserSupport impleme
|
|
|
* 判断是否无需重写
|
|
* 判断是否无需重写
|
|
|
* ps:虽然有点中文式英语,但是容易读懂即可
|
|
* ps:虽然有点中文式英语,但是容易读懂即可
|
|
|
*
|
|
*
|
|
|
- * @param ms MappedStatement
|
|
|
|
|
|
|
+ * @param ms MappedStatement
|
|
|
* @param rules 数据权限规则数组
|
|
* @param rules 数据权限规则数组
|
|
|
* @return 是否无需重写
|
|
* @return 是否无需重写
|
|
|
*/
|
|
*/
|
|
@@ -614,7 +614,7 @@ public class DataPermissionDatabaseInterceptor extends JsqlParserSupport impleme
|
|
|
/**
|
|
/**
|
|
|
* 添加无需重写的 MappedStatement
|
|
* 添加无需重写的 MappedStatement
|
|
|
*
|
|
*
|
|
|
- * @param ms MappedStatement
|
|
|
|
|
|
|
+ * @param ms MappedStatement
|
|
|
* @param rules 数据权限规则数组
|
|
* @param rules 数据权限规则数组
|
|
|
*/
|
|
*/
|
|
|
public void addNoRewritable(MappedStatement ms, List<DataPermissionRule> rules) {
|
|
public void addNoRewritable(MappedStatement ms, List<DataPermissionRule> rules) {
|