From 08e40b611b2bdc97361d4a6d753b788b83818623 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期日, 05 一月 2025 23:00:56 +0800
Subject: [PATCH] fix 修复 数据权限 多角色多注解包含忽略权限标识符逻辑不正确问题
---
ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java | 48 ++++++++++++++++++++++++++++--------------------
1 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java
index 783d352..07baedb 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java
@@ -135,6 +135,27 @@
context.setBeanResolver(beanResolver);
DataPermissionHelper.getContext().forEach(context::setVariable);
Set<String> conditions = new HashSet<>();
+ // 浼樺厛璁剧疆鍙橀噺
+ List<String> keys = new ArrayList<>();
+ Map<DataColumn, Boolean> ignoreMap = new HashMap<>();
+ for (DataColumn dataColumn : dataPermission.value()) {
+ if (dataColumn.key().length != dataColumn.value().length) {
+ throw new ServiceException("瑙掕壊鏁版嵁鑼冨洿寮傚父 => key涓巚alue闀垮害涓嶅尮閰�");
+ }
+ // 鍖呭惈鏉冮檺鏍囪瘑绗� 杩欑洿鎺ヨ烦杩�
+ if (StringUtils.isNotBlank(dataColumn.permission()) &&
+ CollUtil.contains(user.getMenuPermission(), dataColumn.permission())
+ ) {
+ ignoreMap.put(dataColumn, Boolean.TRUE);
+ continue;
+ }
+ // 璁剧疆娉ㄨВ鍙橀噺 key 涓鸿〃杈惧紡鍙橀噺 value 涓哄彉閲忓��
+ for (int i = 0; i < dataColumn.key().length; i++) {
+ context.setVariable(dataColumn.key()[i], dataColumn.value()[i]);
+ }
+ keys.addAll(Arrays.stream(dataColumn.key()).map(key -> "#" + key).toList());
+ }
+
for (RoleDTO role : user.getRoles()) {
user.setRoleId(role.getRoleId());
// 鑾峰彇瑙掕壊鏉冮檺娉涘瀷
@@ -144,32 +165,19 @@
}
// 鍏ㄩ儴鏁版嵁鏉冮檺鐩存帴杩斿洖
if (type == DataScopeType.ALL) {
- return "";
+ return StringUtils.EMPTY;
}
boolean isSuccess = false;
- List<String> keys = new ArrayList<>();
for (DataColumn dataColumn : dataPermission.value()) {
- if (dataColumn.key().length != dataColumn.value().length) {
- throw new ServiceException("瑙掕壊鏁版嵁鑼冨洿寮傚父 => key涓巚alue闀垮害涓嶅尮閰�");
- }
- // 璁剧疆娉ㄨВ鍙橀噺 key 涓鸿〃杈惧紡鍙橀噺 value 涓哄彉閲忓��
- for (int i = 0; i < dataColumn.key().length; i++) {
- context.setVariable(dataColumn.key()[i], dataColumn.value()[i]);
- }
- keys.addAll(Arrays.stream(dataColumn.key()).map(key -> "#" + key).toList());
- }
- for (DataColumn dataColumn : dataPermission.value()) {
- // 涓嶅寘鍚� key 鍙橀噺 鍒欎笉澶勭悊
- if (!StringUtils.containsAny(type.getSqlTemplate(), keys.toArray(String[]::new))) {
- continue;
- }
// 鍖呭惈鏉冮檺鏍囪瘑绗� 杩欑洿鎺ヨ烦杩�
- if (StringUtils.isNotBlank(dataColumn.permission()) &&
- CollUtil.contains(user.getMenuPermission(), dataColumn.permission())
- ) {
+ if (ignoreMap.containsKey(dataColumn)) {
// 淇澶氳鑹蹭笌鏉冮檺鏍囪瘑绗﹀叡鐢ㄩ棶棰� https://gitee.com/dromara/RuoYi-Vue-Plus/issues/IB4CS4
conditions.add(joinStr + " 1 = 1 ");
isSuccess = true;
+ continue;
+ }
+ // 涓嶅寘鍚� key 鍙橀噺 鍒欎笉澶勭悊
+ if (!StringUtils.containsAny(type.getSqlTemplate(), keys.toArray(String[]::new))) {
continue;
}
@@ -191,7 +199,7 @@
String sql = StreamUtils.join(conditions, Function.identity(), "");
return sql.substring(joinStr.length());
}
- return "";
+ return StringUtils.EMPTY;
}
/**
--
Gitblit v1.9.3