From f280764caf198728677a5b8fa62175e1b3ccd209 Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期日, 04 五月 2025 21:36:39 +0800
Subject: [PATCH] tag分页异常捕获

---
 iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/controller/admin/auth/AuthController.java |  110 +++++++++++++++++++++++-------------------------------
 1 files changed, 47 insertions(+), 63 deletions(-)

diff --git a/iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/controller/admin/auth/AuthController.java b/iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/controller/admin/auth/AuthController.java
index 1c3eb85..c3c0e3c 100644
--- a/iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/controller/admin/auth/AuthController.java
+++ b/iailab-module-system/iailab-module-system-biz/src/main/java/com/iailab/module/system/controller/admin/auth/AuthController.java
@@ -4,17 +4,12 @@
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.StrUtil;
 import com.iailab.framework.common.enums.CommonStatusEnum;
-import com.iailab.framework.common.enums.UserTypeEnum;
 import com.iailab.framework.common.pojo.CommonResult;
 import com.iailab.framework.common.util.object.BeanUtils;
 import com.iailab.framework.security.config.SecurityProperties;
-import com.iailab.framework.security.core.LoginUser;
 import com.iailab.framework.security.core.util.SecurityFrameworkUtils;
-import com.iailab.module.system.controller.admin.app.vo.AppMenuRespVO;
 import com.iailab.module.system.controller.admin.app.vo.AppRespVO;
 import com.iailab.module.system.controller.admin.auth.vo.*;
-import com.iailab.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
-import com.iailab.module.system.controller.admin.permission.vo.menu.MenuRespVO;
 import com.iailab.module.system.convert.auth.AuthConvert;
 import com.iailab.module.system.dal.dataobject.app.AppDO;
 import com.iailab.module.system.dal.dataobject.permission.MenuDO;
@@ -27,14 +22,11 @@
 import com.iailab.module.system.service.permission.MenuService;
 import com.iailab.module.system.service.permission.PermissionService;
 import com.iailab.module.system.service.permission.RoleService;
-import com.iailab.module.system.service.social.SocialClientService;
 import com.iailab.module.system.service.user.AdminUserService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.security.core.Authentication;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -68,8 +60,6 @@
     private MenuService menuService;
     @Resource
     private PermissionService permissionService;
-    @Resource
-    private SocialClientService socialClientService;
     @Resource
     private SecurityProperties securityProperties;
     @Resource
@@ -136,6 +126,34 @@
         Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId));
         List<MenuDO> menuList = menuService.getMenuList(menuIds);
         menuList = menuService.filterDisableMenus(menuList);
+        menuList = menuService.filterMenus(menuList, "system");
+
+        // 2. 拼接结果返回
+        return success(AuthConvert.INSTANCE.convert(user, roles, menuList));
+    }
+
+    @GetMapping("/get-app-permission-info")
+    @Operation(summary = "脚手架获取登录用户的权限信息")
+    public CommonResult<AuthPermissionInfoRespVO> getAppPermissionInfo() {
+        // 1.1 获得用户信息
+        AdminUserDO user = userService.getUser(getLoginUserId());
+        if (user == null) {
+            return success(null);
+        }
+
+        // 1.2 获得角色列表
+        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId());
+        if (CollUtil.isEmpty(roleIds)) {
+            return success(AuthConvert.INSTANCE.convert(user, Collections.emptyList(), Collections.emptyList()));
+        }
+        List<RoleDO> roles = roleService.getRoleList(roleIds);
+        roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色
+
+        // 1.3 获得菜单列表
+        Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId));
+        List<MenuDO> menuList = menuService.getMenuList(menuIds);
+        menuList = menuService.filterDisableMenus(menuList);
+        menuList = menuService.filterMenus(menuList, "app");
 
         // 2. 拼接结果返回
         return success(AuthConvert.INSTANCE.convert(user, roles, menuList));
@@ -211,65 +229,31 @@
         }
         children.retainAll(menuList);
         List<MenuDO> tempChildren = new LinkedList<>();
-        //为每一个二级菜单增加一个隐藏父级目录
+        //为每一个二级菜单(非外链菜单)增加一个隐藏父级目录
         children.stream().forEach(menu -> {
-            if (menu.getType().equals(MenuTypeEnum.MENU.getType()) && menu.getParentId().equals(menuDO.getId())) {
-                MenuDO parentMenu = BeanUtils.toBean(menu, MenuDO.class);
-                parentMenu.setId(System.currentTimeMillis() + (int) (Math.random() * (99999 - 10000 + 1)) + 10000);
-                parentMenu.setType(MenuTypeEnum.DIR.getType());
-                parentMenu.setVisible(true);
-                parentMenu.setAlwaysShow(false);
-                parentMenu.setParentId(menuDO.getId());
-                parentMenu.setPath("/");
-                menu.setParentId(parentMenu.getId());
-                tempChildren.add(parentMenu);
-                tempChildren.add(menu);
-            } else {
-                tempChildren.add(menu);
+            if (menu.getParentId().equals(menuDO.getId())) {
+                if(menu.getType().equals(MenuTypeEnum.MENU.getType())) {
+                    MenuDO parentMenu = BeanUtils.toBean(menu, MenuDO.class);
+                    parentMenu.setId(System.currentTimeMillis() + (int) (Math.random() * (99999 - 10000 + 1)) + 10000);
+                    parentMenu.setType(MenuTypeEnum.DIR.getType());
+                    parentMenu.setVisible(true);
+                    parentMenu.setAlwaysShow(false);
+                    parentMenu.setParentId(menuDO.getId());
+                    parentMenu.setPath("/");
+                    menu.setParentId(parentMenu.getId());
+                    tempChildren.add(parentMenu);
+                } else if(menu.getType().equals(MenuTypeEnum.DIR.getType())) {
+                    // 为应用菜单二级目录前增加“/” (不处理外链菜单path)
+                    if(!menu.getPath().contains("http:") && !menu.getPath().contains("https:")) {
+                        menu.setPath("/" + menu.getPath());
+                    }
+                }
             }
+            tempChildren.add(menu);
         });
         menuVOS = AuthConvert.INSTANCE.buildMenuTree(tempChildren, menuDO.getId(), menuDO.getPath(), info.getType());
         // 2. 拼接结果返回
         return success(menuVOS);
-    }
-
-    // ========== 短信登录相关 ==========
-
-    @PostMapping("/sms-login")
-    @PermitAll
-    @Operation(summary = "使用短信验证码登录")
-    public CommonResult<AuthLoginRespVO> smsLogin(@RequestBody @Valid AuthSmsLoginReqVO reqVO) {
-        return success(authService.smsLogin(reqVO));
-    }
-
-    @PostMapping("/send-sms-code")
-    @PermitAll
-    @Operation(summary = "发送手机验证码")
-    public CommonResult<Boolean> sendLoginSmsCode(@RequestBody @Valid AuthSmsSendReqVO reqVO) {
-        authService.sendSmsCode(reqVO);
-        return success(true);
-    }
-
-    // ========== 社交登录相关 ==========
-
-    @GetMapping("/social-auth-redirect")
-    @PermitAll
-    @Operation(summary = "社交授权的跳转")
-    @Parameters({
-            @Parameter(name = "type", description = "社交类型", required = true),
-            @Parameter(name = "redirectUri", description = "回调路径")
-    })
-    public CommonResult<String> socialLogin(@RequestParam("type") Integer type,
-                                            @RequestParam("redirectUri") String redirectUri) {
-        return success(socialClientService.getAuthorizeUrl(
-                type, UserTypeEnum.ADMIN.getValue(), redirectUri));
-    }
-
-    @PostMapping("/social-login")
-    @PermitAll
-    @Operation(summary = "社交快捷登录,使用 code 授权码", description = "适合未登录的用户,但是社交账号已绑定用户")
-    public CommonResult<AuthLoginRespVO> socialQuickLogin(@RequestBody @Valid AuthSocialLoginReqVO reqVO) {
-        return success(authService.socialLogin(reqVO));
     }
 
 }

--
Gitblit v1.9.3