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(); + } + } }