diff --git a/yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java b/yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java index eaa6e6aeda..8119c7d52b 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; import cn.iocoder.yudao.framework.datapermission.core.aop.DataPermissionContextHolder; +import com.fhs.trans.service.impl.SimpleTransService; import lombok.RequiredArgsConstructor; import java.util.Collections; @@ -31,32 +32,53 @@ public class DataPermissionRuleFactoryImpl implements DataPermissionRuleFactory @Override // mappedStatementId 参数,暂时没有用。以后,可以基于 mappedStatementId + DataPermission 进行缓存 public List getDataPermissionRule(String mappedStatementId) { - // 1. 无数据权限 + // 1.1 无数据权限 if (CollUtil.isEmpty(rules)) { return Collections.emptyList(); } - // 2. 未配置,则默认开启 + // 1.2 未配置,则默认开启 DataPermission dataPermission = DataPermissionContextHolder.get(); if (dataPermission == null) { return rules; } - // 3. 已配置,但禁用 + // 1.3 已配置,但禁用 if (!dataPermission.enable()) { return Collections.emptyList(); } + // 1.4 特殊:数据翻译时,强制忽略数据权限 https://github.com/YunaiV/ruoyi-vue-pro/issues/1007 + if (isTranslateCall()) { + return Collections.emptyList(); + } - // 4. 已配置,只选择部分规则 + // 2.1 情况一:已配置,只选择部分规则 if (ArrayUtil.isNotEmpty(dataPermission.includeRules())) { return rules.stream().filter(rule -> ArrayUtil.contains(dataPermission.includeRules(), rule.getClass())) .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 } - // 5. 已配置,只排除部分规则 + // 2.2 已配置,只排除部分规则 if (ArrayUtil.isNotEmpty(dataPermission.excludeRules())) { return rules.stream().filter(rule -> !ArrayUtil.contains(dataPermission.excludeRules(), rule.getClass())) .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 } - // 6. 已配置,全部规则 + // 2.3 已配置,全部规则 return rules; } + /** + * 判断是否为数据翻译 {@link com.fhs.core.trans.anno.Trans} 的调用 + * + * 目前暂时只有这个办法,已经和 easy-trans 做过沟通 + * + * @return 是否 + */ + private boolean isTranslateCall() { + StackTraceElement[] stack = Thread.currentThread().getStackTrace(); + for (StackTraceElement e : stack) { + if (SimpleTransService.class.getName().equals(e.getClassName())) { + return true; + } + } + return false; + } + }