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