Commit 24a88059fc0dc823abb9c08f39abe53244d45875

Authored by YunaiV
1 parent ed3edaf7

fix:【framework】修复 easy-trans 因为数据权限,导致无法读取的问题

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; @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.util.ArrayUtil; 4 import cn.hutool.core.util.ArrayUtil;
5 import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; 5 import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
6 import cn.iocoder.yudao.framework.datapermission.core.aop.DataPermissionContextHolder; 6 import cn.iocoder.yudao.framework.datapermission.core.aop.DataPermissionContextHolder;
  7 +import com.fhs.trans.service.impl.SimpleTransService;
7 import lombok.RequiredArgsConstructor; 8 import lombok.RequiredArgsConstructor;
8 9
9 import java.util.Collections; 10 import java.util.Collections;
@@ -31,32 +32,53 @@ public class DataPermissionRuleFactoryImpl implements DataPermissionRuleFactory @@ -31,32 +32,53 @@ public class DataPermissionRuleFactoryImpl implements DataPermissionRuleFactory
31 32
32 @Override // mappedStatementId 参数,暂时没有用。以后,可以基于 mappedStatementId + DataPermission 进行缓存 33 @Override // mappedStatementId 参数,暂时没有用。以后,可以基于 mappedStatementId + DataPermission 进行缓存
33 public List<DataPermissionRule> getDataPermissionRule(String mappedStatementId) { 34 public List<DataPermissionRule> getDataPermissionRule(String mappedStatementId) {
34 - // 1. 无数据权限 35 + // 1.1 无数据权限
35 if (CollUtil.isEmpty(rules)) { 36 if (CollUtil.isEmpty(rules)) {
36 return Collections.emptyList(); 37 return Collections.emptyList();
37 } 38 }
38 - // 2. 未配置,则默认开启 39 + // 1.2 未配置,则默认开启
39 DataPermission dataPermission = DataPermissionContextHolder.get(); 40 DataPermission dataPermission = DataPermissionContextHolder.get();
40 if (dataPermission == null) { 41 if (dataPermission == null) {
41 return rules; 42 return rules;
42 } 43 }
43 - // 3. 已配置,但禁用 44 + // 1.3 已配置,但禁用
44 if (!dataPermission.enable()) { 45 if (!dataPermission.enable()) {
45 return Collections.emptyList(); 46 return Collections.emptyList();
46 } 47 }
  48 + // 1.4 特殊:数据翻译时,强制忽略数据权限 https://github.com/YunaiV/ruoyi-vue-pro/issues/1007
  49 + if (isTranslateCall()) {
  50 + return Collections.emptyList();
  51 + }
47 52
48 - // 4. 已配置,只选择部分规则 53 + // 2.1 情况一:已配置,只选择部分规则
49 if (ArrayUtil.isNotEmpty(dataPermission.includeRules())) { 54 if (ArrayUtil.isNotEmpty(dataPermission.includeRules())) {
50 return rules.stream().filter(rule -> ArrayUtil.contains(dataPermission.includeRules(), rule.getClass())) 55 return rules.stream().filter(rule -> ArrayUtil.contains(dataPermission.includeRules(), rule.getClass()))
51 .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 56 .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询
52 } 57 }
53 - // 5. 已配置,只排除部分规则 58 + // 2.2 已配置,只排除部分规则
54 if (ArrayUtil.isNotEmpty(dataPermission.excludeRules())) { 59 if (ArrayUtil.isNotEmpty(dataPermission.excludeRules())) {
55 return rules.stream().filter(rule -> !ArrayUtil.contains(dataPermission.excludeRules(), rule.getClass())) 60 return rules.stream().filter(rule -> !ArrayUtil.contains(dataPermission.excludeRules(), rule.getClass()))
56 .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 61 .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询
57 } 62 }
58 - // 6. 已配置,全部规则 63 + // 2.3 已配置,全部规则
59 return rules; 64 return rules;
60 } 65 }
61 66
  67 + /**
  68 + * 判断是否为数据翻译 {@link com.fhs.core.trans.anno.Trans} 的调用
  69 + *
  70 + * 目前暂时只有这个办法,已经和 easy-trans 做过沟通
  71 + *
  72 + * @return 是否
  73 + */
  74 + private boolean isTranslateCall() {
  75 + StackTraceElement[] stack = Thread.currentThread().getStackTrace();
  76 + for (StackTraceElement e : stack) {
  77 + if (SimpleTransService.class.getName().equals(e.getClassName())) {
  78 + return true;
  79 + }
  80 + }
  81 + return false;
  82 + }
  83 +
62 } 84 }