From 6cef375f571bfc0cf50982d75283f8eb260daf62 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期五, 23 十月 2026 12:44:23 +0800
Subject: [PATCH] fix(aftersales): 售后工单数据权限支持「处理人」可见;补齐全模块缺失权限点

---
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/util/AfterSalePermissionUtils.java |   33 ++++++++++++++++++++++++++++-----
 1 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/util/AfterSalePermissionUtils.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/util/AfterSalePermissionUtils.java
index b8da995..9c9f680 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/util/AfterSalePermissionUtils.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/util/AfterSalePermissionUtils.java
@@ -54,11 +54,30 @@
     public static <T extends MPJLambdaWrapper<?>, S> void appendPermissionCondition(T query, Integer bizType,
                                                                                      SFunction<S, ?> bizId,
                                                                                      Long userId, Integer sceneType) {
+        appendPermissionCondition(query, bizType, bizId, userId, sceneType, null);
+    }
+
+    /**
+     * 鏋勯�犲敭鍚庢ā鍧楁暟鎹�愬垎椤点�戞煡璇㈡潯浠讹紙鏀寔銆屽鐞嗕汉銆嶄篃绠楀彲瑙佽寖鍥达級
+     *
+     * @param handlerUserIdField 澶勭悊浜哄瓧娈碉紙甯﹁〃鍒悕锛夛紝涓� null 琛ㄧず璇ヨ〃娌℃湁澶勭悊浜烘蹇�
+     */
+    public static <T extends MPJLambdaWrapper<?>, S> void appendPermissionCondition(T query, Integer bizType,
+                                                                                     SFunction<S, ?> bizId,
+                                                                                     Long userId, Integer sceneType,
+                                                                                     String handlerUserIdField) {
         MybatisPlusJoinProperties mybatisPlusJoinProperties = SpringUtil.getBean(MybatisPlusJoinProperties.class);
-        final String ownerUserIdField = mybatisPlusJoinProperties.getTableAlias() + ".owner_user_id";
-        // 鍦烘櫙涓�锛氭垜璐熻矗鐨勬暟鎹�
+        final String tableAlias = mybatisPlusJoinProperties.getTableAlias();
+        final String ownerUserIdField = tableAlias + ".owner_user_id";
+        // 澶勭悊浜哄瓧娈佃ˉ榻愯〃鍒悕锛堥伩鍏嶈繛琛ㄦ煡璇㈡椂鍒楀悕姝т箟锛�
+        final String handlerField = handlerUserIdField != null ? tableAlias + "." + handlerUserIdField : null;
+        // 鍦烘櫙涓�锛氭垜璐熻矗鐨勬暟鎹紙鎴栨垜浣滀负澶勭悊浜虹殑鏁版嵁锛�
         if (AfterSaleSceneTypeEnum.isOwner(sceneType)) {
-            query.eq(ownerUserIdField, userId);
+            if (handlerField != null) {
+                query.and(w -> w.eq(ownerUserIdField, userId).or().eq(handlerField, userId));
+            } else {
+                query.eq(ownerUserIdField, userId);
+            }
         }
         // 鍦烘櫙浜岋細鎴戝弬涓庣殑鏁版嵁锛堟垜鏈夎鎴栧啓鏉冮檺锛屽苟涓斾笉鏄礋璐d汉锛�
         if (AfterSaleSceneTypeEnum.isInvolved(sceneType)) {
@@ -82,12 +101,16 @@
                 query.in(ownerUserIdField, convertSet(subordinateUsers, AdminUserRespDTO::getId));
             }
         }
-        // 鍦烘櫙鍥涳細鍏ㄩ儴鏁版嵁锛堥渶瑕佹湁 view-all 鏉冮檺鎴栧敭鍚庣鐞嗗憳锛�
+        // 鍦烘櫙鍥涳細鍏ㄩ儴鏁版嵁锛堥渶瑕佹湁 view-all 鏉冮檺鎴栧敭鍚庣鐞嗗憳锛涘惁鍒欏彧鐪嬭嚜宸辫礋璐� + 鑷繁澶勭悊鐨勶級
         if (AfterSaleSceneTypeEnum.isAll(sceneType)) {
             if (isAftersaleAdmin() || hasViewAllPermission()) {
                 return;
             }
-            query.eq(ownerUserIdField, userId);
+            if (handlerField != null) {
+                query.and(w -> w.eq(ownerUserIdField, userId).or().eq(handlerField, userId));
+            } else {
+                query.eq(ownerUserIdField, userId);
+            }
         }
     }
 

--
Gitblit v1.9.3