diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java index f92f92c88..03aac7150 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java @@ -70,6 +70,11 @@ public class PigxTenantHandler implements TenantLineHandler { */ @Override public boolean ignoreTable(String tableName) { + // 判断是否跳过当前查询的租户过滤 + if (TenantContextHolder.getTenantSkip()) { + return Boolean.TRUE; + } + Long tenantId = TenantContextHolder.getTenantId(); // 租户中ID 为空,查询全部,不进行过滤 if (tenantId == null) { diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java index c7363ac72..79b2527af 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java @@ -29,6 +29,8 @@ public class TenantContextHolder { private final ThreadLocal THREAD_LOCAL_TENANT = new TransmittableThreadLocal<>(); + private final ThreadLocal THREAD_LOCAL_TENANT_SKIP_FLAG = new TransmittableThreadLocal<>(); + /** * TTL 设置租户ID
* 谨慎使用此方法,避免嵌套调用。尽量使用 {@code TenantBroker} @@ -39,6 +41,13 @@ public class TenantContextHolder { THREAD_LOCAL_TENANT.set(tenantId); } + /** + * 设置是否过滤的标识 + */ + public void setTenantSkip() { + THREAD_LOCAL_TENANT_SKIP_FLAG.set(Boolean.TRUE); + } + /** * 获取TTL中的租户ID * @return @@ -47,8 +56,17 @@ public class TenantContextHolder { return THREAD_LOCAL_TENANT.get(); } + /** + * 获取是否跳过租户过滤的标识 + * @return + */ + public Boolean getTenantSkip() { + return THREAD_LOCAL_TENANT_SKIP_FLAG.get() != null && THREAD_LOCAL_TENANT_SKIP_FLAG.get(); + } + public void clear() { THREAD_LOCAL_TENANT.remove(); + THREAD_LOCAL_TENANT_SKIP_FLAG.remove(); } }