From 2fa1c824c63048b49e45d867191ab3645aeaf3a4 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期四, 30 四月 2026 09:54:40 +0800
Subject: [PATCH] 补充收货

---
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java |   61 ++++++++++++++++++++++++++++--
 1 files changed, 56 insertions(+), 5 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 b38af13..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
@@ -1,5 +1,6 @@
 package com.vincent.rsf.server.system.controller;
 
+import com.vincent.rsf.common.enums.SystemModeType;
 import com.vincent.rsf.common.utils.Utils;
 import com.vincent.rsf.framework.common.BaseRes;
 import com.vincent.rsf.framework.common.Cools;
@@ -19,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;
@@ -34,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 +58,8 @@
     @Resource
     private RoleMenuService roleMenuService;
     @Resource
+    private MenuService menuService;
+    @Resource
     private TenantService tenantService;
     @Autowired
     private EmailService emailService;
@@ -62,7 +69,10 @@
     @PostMapping("/login")
     public R login(@RequestBody LoginParam param, HttpServletRequest request) {
         String username = param.getUsername();
-        User user = userService.getByUsername(username, null);
+        User user = userService.getByUsername(username
+                , configProperties.getSystemMode()
+                        .equals(SystemModeType.OFFLINE) ? param.getTenantId() : null
+        );
         if (user == null) {
             return R.parse(BusinessRes.USERNAME_NOT_EXIST);
         }
@@ -85,10 +95,10 @@
             return R.parse(BaseRes.PARAM);
         }
         if (!emailService.isValid(email)) {
-            return R.error("Please enter a valid email address.");
+            return R.parse(BusinessRes.INVALID_EMAIL);
         }
         if (null != userService.getByEmail(email, null)) {
-            return R.error("Email Already Exist");
+            return R.parse(BusinessRes.EMAIL_EXIT);
         }
         Long expire = redisService.getExpire(EmailType.REGISTER_VERIFY.toString(), email);
         if (expire > (configProperties.getCodeTime() - 60)) {
@@ -135,7 +145,7 @@
                 configProperties.getTokenExpireTime(), configProperties.getTokenKey());
         userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, tenantId, null, request);
         Tenant tenant = tenantService.getById(user.getTenantId());
-        return R.ok().add(new LoginResult(accessToken, user, tenant.getName()));
+        return R.ok("Sign Up Success").add(new LoginResult(accessToken, user, tenant.getName()));
     }
 
     @GetMapping("/system/info")
@@ -160,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())) {
@@ -181,6 +197,15 @@
         user.setEmailVerified(null);
         user.setTenantId(null);
         user.setStatus(null);
+        if (!Cools.isEmpty(user.getEmail())) {
+            if (!emailService.isValid(user.getEmail())) {
+                return R.parse(BusinessRes.INVALID_EMAIL);
+            }
+            User one = userService.getByEmail(user.getEmail(), null);
+            if (null != one  && !one.getId().equals(user.getId())) {
+                return R.parse(BusinessRes.EMAIL_EXIT);
+            }
+        }
         if (userService.updateById(user)) {
             return R.ok("Save Success").add(userService.getById(user.getId()));
         }
@@ -212,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