From 228b881e5a893ec010a194ac42011a4169d0c590 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期二, 21 四月 2026 14:24:15 +0800
Subject: [PATCH] 料箱码查询优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java |   40 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 39 insertions(+), 1 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
index 8551b63..e77a1d8 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
@@ -20,12 +20,14 @@
 import com.vincent.rsf.server.system.controller.result.LoginResult;
 import com.vincent.rsf.server.system.controller.result.MenuVo;
 import com.vincent.rsf.server.system.controller.result.SystemInfoVo;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.server.system.entity.Menu;
 import com.vincent.rsf.server.system.entity.Tenant;
 import com.vincent.rsf.server.system.entity.User;
 import com.vincent.rsf.server.system.entity.UserLogin;
 import com.vincent.rsf.server.system.enums.EmailType;
 import com.vincent.rsf.server.system.enums.StatusType;
+import com.vincent.rsf.server.system.service.MenuService;
 import com.vincent.rsf.server.system.service.RoleMenuService;
 import com.vincent.rsf.server.system.service.TenantService;
 import com.vincent.rsf.server.system.service.UserLoginService;
@@ -35,7 +37,9 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -53,6 +57,8 @@
     private UserLoginService userLoginService;
     @Resource
     private RoleMenuService roleMenuService;
+    @Resource
+    private MenuService menuService;
     @Resource
     private TenantService tenantService;
     @Autowired
@@ -164,7 +170,13 @@
 
     @GetMapping("/auth/menu")
     public R userMenu() {
-        List<Menu> menus = roleMenuService.listMenuByUserId(getLoginUserId(), Menu.TYPE_MENU);
+        Long uid = getLoginUserId();
+        List<Menu> grantedAll = roleMenuService.listMenuByUserId(uid, null);
+        Set<Long> grantedMenuIds = grantedAll.stream().map(Menu::getId).collect(Collectors.toCollection(HashSet::new));
+        List<Menu> allMenus = menuService.list(new LambdaQueryWrapper<Menu>().eq(Menu::getDeleted, 0));
+        List<Menu> menus = roleMenuService.listMenuByUserId(uid, Menu.TYPE_MENU).stream()
+                .filter(m -> menuPageGranted(m, grantedMenuIds, allMenus))
+                .collect(Collectors.toList());
         List<MenuVo> voList = menus.stream().map(this::convertToVo).collect(Collectors.toList());
         // exclude tenant
         if (!configProperties.getSuperUserList().contains(getLoginUser().getUsername())) {
@@ -225,6 +237,32 @@
 
     // ----------------------------------------------------
 
+    /**
+     * 椤甸潰绾ц彍鍗曪細鑻ュ瓨鍦ㄥ甫 :list 鐨勬寜閽潈闄愬瓙鑺傜偣锛屽垯蹇呴』鍚屾椂鍕鹃�夎嚦灏戜竴涓绫绘寜閽紝鎵嶅睍绀鸿椤碉紙涓庢帴鍙� @PreAuthorize 涓�鑷达級
+     */
+    private boolean menuPageGranted(Menu m, Set<Long> grantedMenuIds, List<Menu> allMenus) {
+        if (m == null || !Integer.valueOf(Menu.TYPE_MENU).equals(m.getType())) {
+            return true;
+        }
+        if (Cools.isEmpty(m.getComponent())) {
+            return true;
+        }
+        List<Menu> btnChildren = allMenus.stream()
+                .filter(c -> m.getId().equals(c.getParentId()) && Integer.valueOf(Menu.TYPE_BTN).equals(c.getType()))
+                .collect(Collectors.toList());
+        if (btnChildren.isEmpty()) {
+            return true;
+        }
+        boolean needListBtn = btnChildren.stream().anyMatch(c ->
+                c.getAuthority() != null && c.getAuthority().contains(":list"));
+        if (!needListBtn) {
+            return true;
+        }
+        return btnChildren.stream()
+                .filter(c -> c.getAuthority() != null && c.getAuthority().contains(":list"))
+                .anyMatch(c -> grantedMenuIds.contains(c.getId()));
+    }
+
     private MenuVo convertToVo(Menu menu) {
         if (menu == null) {
             return null;

--
Gitblit v1.9.1