diff --git a/ruoyi-common/ruoyi-common-mybatis/pom.xml b/ruoyi-common/ruoyi-common-mybatis/pom.xml
index 731b60fb4b63199c0792fb388f931ffadbaf8334..7b293534b4bf3c9f47cbec908301781b1cb64338 100644
--- a/ruoyi-common/ruoyi-common-mybatis/pom.xml
+++ b/ruoyi-common/ruoyi-common-mybatis/pom.xml
@@ -34,6 +34,11 @@
org.mybatis
mybatis-spring
+
+
+ com.alibaba
+ transmittable-thread-local
+
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java
index b01b05f528c7f49d5abd5c7aad0a225fe7821b4d..3668508b84e749a08726fee53b369fd01550f8ad 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java
@@ -1,5 +1,7 @@
package org.dromara.common.mybatis.annotation;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.ttl.TransmittableThreadLocal;
import com.mybatisflex.core.query.QueryWrapper;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -16,6 +18,8 @@ import org.dromara.common.mybatis.handler.PlusDataPermissionHandler;
@Getter
public class DataPermission {
+ private static final ThreadLocal ignoreFlags = new TransmittableThreadLocal<>();
+
private static final PlusDataPermissionHandler DATA_PERMISSION_HANDLER = SpringUtils.getBean(PlusDataPermissionHandler.class);
DataColumn[] value;
@@ -26,15 +30,29 @@ public class DataPermission {
}
public void handler(QueryWrapper queryWrapper) {
- DATA_PERMISSION_HANDLER.handlerDataPermission(this, queryWrapper, true);
+ Boolean ignoreFlag = ignoreFlags.get();
+ if (ignoreFlag == null || !ignoreFlag) {
+ DATA_PERMISSION_HANDLER.handlerDataPermission(this, queryWrapper, true);
+ }
}
public String toSQL(boolean isSelect) {
- return DATA_PERMISSION_HANDLER.getSQL(this, isSelect);
+ Boolean ignoreFlag = ignoreFlags.get();
+ if (ignoreFlag == null || !ignoreFlag) {
+ return DATA_PERMISSION_HANDLER.getSQL(this, isSelect);
+ }
+ return StrUtil.EMPTY;
}
public String toSQL() {
return toSQL(true);
}
+ public static void ignoreDataPermissionCondition() {
+ ignoreFlags.set(Boolean.TRUE);
+ }
+
+ public static void restoreDataPermissionCondition() {
+ ignoreFlags.remove();
+ }
}
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java
index 537ac6037e2b963a175bd581874d0dc16623898d..07c5285027f7772a17c89cd263d77ca9e09de471 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java
@@ -5,9 +5,11 @@ import cn.dev33.satoken.context.model.SaStorage;
import cn.hutool.core.util.ObjectUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.dromara.common.mybatis.annotation.DataPermission;
import java.util.HashMap;
import java.util.Map;
+import java.util.function.Supplier;
/**
* 数据权限助手
@@ -45,5 +47,46 @@ public class DataPermissionHelper {
throw new NullPointerException("data permission context type exception");
}
+ /**
+ * 开启忽略数据权限(开启后需手动调用 {@link #disableIgnore()} 关闭)
+ */
+ public static void enableIgnore() {
+ DataPermission.ignoreDataPermissionCondition();
+ }
+
+ /**
+ * 关闭忽略数据权限
+ */
+ public static void disableIgnore() {
+ DataPermission.restoreDataPermissionCondition();
+ }
+
+ /**
+ * 在忽略数据权限中执行
+ *
+ * @param handle 处理执行方法
+ */
+ public static void ignore(Runnable handle) {
+ enableIgnore();
+ try {
+ handle.run();
+ } finally {
+ disableIgnore();
+ }
+ }
+
+ /**
+ * 在忽略数据权限中执行
+ *
+ * @param handle 处理执行方法
+ */
+ public static T ignore(Supplier handle) {
+ enableIgnore();
+ try {
+ return handle.get();
+ } finally {
+ disableIgnore();
+ }
+ }
}