Commit 3bf173d744d68c8e447c8018c575f098434ab975
1 parent
c9372b0a
1. 简化 ruoyi 获取菜单列表时,和前端耦合性比较重的情况
2. 删除 MenuDO 表非关键性字段,进一步简化模型
Showing
14 changed files
with
86 additions
and
284 deletions
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java deleted
| 1 | -package com.ruoyi.web.controller.system; | ||
| 2 | - | ||
| 3 | -import java.util.List; | ||
| 4 | -import java.util.Set; | ||
| 5 | -import org.springframework.beans.factory.annotation.Autowired; | ||
| 6 | -import org.springframework.web.bind.annotation.GetMapping; | ||
| 7 | -import org.springframework.web.bind.annotation.PostMapping; | ||
| 8 | -import org.springframework.web.bind.annotation.RequestBody; | ||
| 9 | -import org.springframework.web.bind.annotation.RestController; | ||
| 10 | -import com.ruoyi.common.constant.Constants; | ||
| 11 | -import com.ruoyi.common.core.domain.AjaxResult; | ||
| 12 | -import com.ruoyi.common.core.domain.entity.SysMenu; | ||
| 13 | -import com.ruoyi.common.core.domain.entity.SysUser; | ||
| 14 | -import com.ruoyi.common.core.domain.model.LoginBody; | ||
| 15 | -import com.ruoyi.common.core.domain.model.LoginUser; | ||
| 16 | -import com.ruoyi.common.utils.ServletUtils; | ||
| 17 | -import com.ruoyi.framework.web.service.SysLoginService; | ||
| 18 | -import com.ruoyi.framework.web.service.SysPermissionService; | ||
| 19 | -import com.ruoyi.framework.web.service.TokenService; | ||
| 20 | -import com.ruoyi.system.service.ISysMenuService; | ||
| 21 | - | ||
| 22 | - | ||
| 23 | -public class SysLoginController { | ||
| 24 | - | ||
| 25 | - /** | ||
| 26 | - * 获取路由信息 | ||
| 27 | - * | ||
| 28 | - * @return 路由信息 | ||
| 29 | - */ | ||
| 30 | - @GetMapping("getRouters") | ||
| 31 | - public AjaxResult getRouters() | ||
| 32 | - { | ||
| 33 | - LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); | ||
| 34 | - // 用户信息 | ||
| 35 | - SysUser user = loginUser.getUser(); | ||
| 36 | - List<SysMenu> menus = menuService.selectMenuTreeByUserId(user.getUserId()); | ||
| 37 | - return AjaxResult.success(menuService.buildMenus(menus)); | ||
| 38 | - } | ||
| 39 | - | ||
| 40 | -} |
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
| 1 | package com.ruoyi.web.controller.system; | 1 | package com.ruoyi.web.controller.system; |
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | + | ||
| 4 | import org.springframework.beans.factory.annotation.Autowired; | 5 | import org.springframework.beans.factory.annotation.Autowired; |
| 5 | import org.springframework.security.access.prepost.PreAuthorize; | 6 | import org.springframework.security.access.prepost.PreAuthorize; |
| 6 | import org.springframework.validation.annotation.Validated; | 7 | import org.springframework.validation.annotation.Validated; |
| @@ -28,13 +29,12 @@ import com.ruoyi.system.service.ISysMenuService; | @@ -28,13 +29,12 @@ import com.ruoyi.system.service.ISysMenuService; | ||
| 28 | 29 | ||
| 29 | /** | 30 | /** |
| 30 | * 菜单信息 | 31 | * 菜单信息 |
| 31 | - * | 32 | + * |
| 32 | * @author ruoyi | 33 | * @author ruoyi |
| 33 | */ | 34 | */ |
| 34 | @RestController | 35 | @RestController |
| 35 | @RequestMapping("/system/menu") | 36 | @RequestMapping("/system/menu") |
| 36 | -public class SysMenuController extends BaseController | ||
| 37 | -{ | 37 | +public class SysMenuController extends BaseController { |
| 38 | @Autowired | 38 | @Autowired |
| 39 | private ISysMenuService menuService; | 39 | private ISysMenuService menuService; |
| 40 | 40 | ||
| @@ -46,8 +46,7 @@ public class SysMenuController extends BaseController | @@ -46,8 +46,7 @@ public class SysMenuController extends BaseController | ||
| 46 | */ | 46 | */ |
| 47 | @PreAuthorize("@ss.hasPermi('system:menu:list')") | 47 | @PreAuthorize("@ss.hasPermi('system:menu:list')") |
| 48 | @GetMapping("/list") | 48 | @GetMapping("/list") |
| 49 | - public AjaxResult list(SysMenu menu) | ||
| 50 | - { | 49 | + public AjaxResult list(SysMenu menu) { |
| 51 | LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); | 50 | LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); |
| 52 | Long userId = loginUser.getUser().getUserId(); | 51 | Long userId = loginUser.getUser().getUserId(); |
| 53 | List<SysMenu> menus = menuService.selectMenuList(menu, userId); | 52 | List<SysMenu> menus = menuService.selectMenuList(menu, userId); |
| @@ -59,8 +58,7 @@ public class SysMenuController extends BaseController | @@ -59,8 +58,7 @@ public class SysMenuController extends BaseController | ||
| 59 | */ | 58 | */ |
| 60 | @PreAuthorize("@ss.hasPermi('system:menu:query')") | 59 | @PreAuthorize("@ss.hasPermi('system:menu:query')") |
| 61 | @GetMapping(value = "/{menuId}") | 60 | @GetMapping(value = "/{menuId}") |
| 62 | - public AjaxResult getInfo(@PathVariable Long menuId) | ||
| 63 | - { | 61 | + public AjaxResult getInfo(@PathVariable Long menuId) { |
| 64 | return AjaxResult.success(menuService.selectMenuById(menuId)); | 62 | return AjaxResult.success(menuService.selectMenuById(menuId)); |
| 65 | } | 63 | } |
| 66 | 64 | ||
| @@ -68,8 +66,7 @@ public class SysMenuController extends BaseController | @@ -68,8 +66,7 @@ public class SysMenuController extends BaseController | ||
| 68 | * 获取菜单下拉树列表 | 66 | * 获取菜单下拉树列表 |
| 69 | */ | 67 | */ |
| 70 | @GetMapping("/treeselect") | 68 | @GetMapping("/treeselect") |
| 71 | - public AjaxResult treeselect(SysMenu menu) | ||
| 72 | - { | 69 | + public AjaxResult treeselect(SysMenu menu) { |
| 73 | LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); | 70 | LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); |
| 74 | Long userId = loginUser.getUser().getUserId(); | 71 | Long userId = loginUser.getUser().getUserId(); |
| 75 | List<SysMenu> menus = menuService.selectMenuList(menu, userId); | 72 | List<SysMenu> menus = menuService.selectMenuList(menu, userId); |
| @@ -80,8 +77,7 @@ public class SysMenuController extends BaseController | @@ -80,8 +77,7 @@ public class SysMenuController extends BaseController | ||
| 80 | * 加载对应角色菜单列表树 | 77 | * 加载对应角色菜单列表树 |
| 81 | */ | 78 | */ |
| 82 | @GetMapping(value = "/roleMenuTreeselect/{roleId}") | 79 | @GetMapping(value = "/roleMenuTreeselect/{roleId}") |
| 83 | - public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) | ||
| 84 | - { | 80 | + public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) { |
| 85 | LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); | 81 | LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); |
| 86 | List<SysMenu> menus = menuService.selectMenuList(loginUser.getUser().getUserId()); | 82 | List<SysMenu> menus = menuService.selectMenuList(loginUser.getUser().getUserId()); |
| 87 | AjaxResult ajax = AjaxResult.success(); | 83 | AjaxResult ajax = AjaxResult.success(); |
| @@ -96,15 +92,11 @@ public class SysMenuController extends BaseController | @@ -96,15 +92,11 @@ public class SysMenuController extends BaseController | ||
| 96 | @PreAuthorize("@ss.hasPermi('system:menu:add')") | 92 | @PreAuthorize("@ss.hasPermi('system:menu:add')") |
| 97 | @Log(title = "菜单管理", businessType = BusinessType.INSERT) | 93 | @Log(title = "菜单管理", businessType = BusinessType.INSERT) |
| 98 | @PostMapping | 94 | @PostMapping |
| 99 | - public AjaxResult add(@Validated @RequestBody SysMenu menu) | ||
| 100 | - { | ||
| 101 | - if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) | ||
| 102 | - { | 95 | + public AjaxResult add(@Validated @RequestBody SysMenu menu) { |
| 96 | + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { | ||
| 103 | return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); | 97 | return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); |
| 104 | - } | ||
| 105 | - else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) | ||
| 106 | - && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) | ||
| 107 | - { | 98 | + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) |
| 99 | + && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) { | ||
| 108 | return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); | 100 | return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); |
| 109 | } | 101 | } |
| 110 | menu.setCreateBy(SecurityUtils.getUsername()); | 102 | menu.setCreateBy(SecurityUtils.getUsername()); |
| @@ -117,19 +109,13 @@ public class SysMenuController extends BaseController | @@ -117,19 +109,13 @@ public class SysMenuController extends BaseController | ||
| 117 | @PreAuthorize("@ss.hasPermi('system:menu:edit')") | 109 | @PreAuthorize("@ss.hasPermi('system:menu:edit')") |
| 118 | @Log(title = "菜单管理", businessType = BusinessType.UPDATE) | 110 | @Log(title = "菜单管理", businessType = BusinessType.UPDATE) |
| 119 | @PutMapping | 111 | @PutMapping |
| 120 | - public AjaxResult edit(@Validated @RequestBody SysMenu menu) | ||
| 121 | - { | ||
| 122 | - if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) | ||
| 123 | - { | 112 | + public AjaxResult edit(@Validated @RequestBody SysMenu menu) { |
| 113 | + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { | ||
| 124 | return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); | 114 | return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); |
| 125 | - } | ||
| 126 | - else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) | ||
| 127 | - && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) | ||
| 128 | - { | 115 | + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) |
| 116 | + && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) { | ||
| 129 | return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); | 117 | return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); |
| 130 | - } | ||
| 131 | - else if (menu.getMenuId().equals(menu.getParentId())) | ||
| 132 | - { | 118 | + } else if (menu.getMenuId().equals(menu.getParentId())) { |
| 133 | return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); | 119 | return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); |
| 134 | } | 120 | } |
| 135 | menu.setUpdateBy(SecurityUtils.getUsername()); | 121 | menu.setUpdateBy(SecurityUtils.getUsername()); |
| @@ -142,16 +128,13 @@ public class SysMenuController extends BaseController | @@ -142,16 +128,13 @@ public class SysMenuController extends BaseController | ||
| 142 | @PreAuthorize("@ss.hasPermi('system:menu:remove')") | 128 | @PreAuthorize("@ss.hasPermi('system:menu:remove')") |
| 143 | @Log(title = "菜单管理", businessType = BusinessType.DELETE) | 129 | @Log(title = "菜单管理", businessType = BusinessType.DELETE) |
| 144 | @DeleteMapping("/{menuId}") | 130 | @DeleteMapping("/{menuId}") |
| 145 | - public AjaxResult remove(@PathVariable("menuId") Long menuId) | ||
| 146 | - { | ||
| 147 | - if (menuService.hasChildByMenuId(menuId)) | ||
| 148 | - { | 131 | + public AjaxResult remove(@PathVariable("menuId") Long menuId) { |
| 132 | + if (menuService.hasChildByMenuId(menuId)) { | ||
| 149 | return AjaxResult.error("存在子菜单,不允许删除"); | 133 | return AjaxResult.error("存在子菜单,不允许删除"); |
| 150 | } | 134 | } |
| 151 | - if (menuService.checkMenuExistRole(menuId)) | ||
| 152 | - { | 135 | + if (menuService.checkMenuExistRole(menuId)) { |
| 153 | return AjaxResult.error("菜单已分配,不允许删除"); | 136 | return AjaxResult.error("菜单已分配,不允许删除"); |
| 154 | } | 137 | } |
| 155 | return toAjax(menuService.deleteMenuById(menuId)); | 138 | return toAjax(menuService.deleteMenuById(menuId)); |
| 156 | } | 139 | } |
| 157 | -} | ||
| 158 | \ No newline at end of file | 140 | \ No newline at end of file |
| 141 | +} |
ruoyi-ui/src/api/login.js
| @@ -18,7 +18,7 @@ export function login(username, password, code, uuid) { | @@ -18,7 +18,7 @@ export function login(username, password, code, uuid) { | ||
| 18 | // 获取用户详细信息 | 18 | // 获取用户详细信息 |
| 19 | export function getInfo() { | 19 | export function getInfo() { |
| 20 | return request({ | 20 | return request({ |
| 21 | - url: '/get-info', | 21 | + url: '/get-permission-info', |
| 22 | method: 'get' | 22 | method: 'get' |
| 23 | }) | 23 | }) |
| 24 | } | 24 | } |
ruoyi-ui/src/api/menu.js
| @@ -3,7 +3,7 @@ import request from '@/utils/request' | @@ -3,7 +3,7 @@ import request from '@/utils/request' | ||
| 3 | // 获取路由 | 3 | // 获取路由 |
| 4 | export const getRouters = () => { | 4 | export const getRouters = () => { |
| 5 | return request({ | 5 | return request({ |
| 6 | - url: '/get-routers', | 6 | + url: '/list-menus', |
| 7 | method: 'get' | 7 | method: 'get' |
| 8 | }) | 8 | }) |
| 9 | } | 9 | } |
ruoyi-ui/src/store/modules/permission.js
| @@ -43,18 +43,27 @@ const permission = { | @@ -43,18 +43,27 @@ const permission = { | ||
| 43 | // 遍历后台传来的路由字符串,转换为组件对象 | 43 | // 遍历后台传来的路由字符串,转换为组件对象 |
| 44 | function filterAsyncRouter(asyncRouterMap, isRewrite = false) { | 44 | function filterAsyncRouter(asyncRouterMap, isRewrite = false) { |
| 45 | return asyncRouterMap.filter(route => { | 45 | return asyncRouterMap.filter(route => { |
| 46 | - if (isRewrite && route.children) { | ||
| 47 | - route.children = filterChildren(route.children) | 46 | + // 将 ruoyi 后端原有耦合前端的逻辑,迁移到此处 |
| 47 | + // 处理 meta 属性 | ||
| 48 | + route.meta = { | ||
| 49 | + title: route.menuName, | ||
| 50 | + icon: route.icon | ||
| 48 | } | 51 | } |
| 49 | - if (route.component) { | ||
| 50 | - // Layout ParentView 组件特殊处理 | ||
| 51 | - if (route.component === 'Layout') { | 52 | + // 处理 component 属性 |
| 53 | + if (route.children) { // 父节点 | ||
| 54 | + // debugger | ||
| 55 | + if (route.parentId === 0) { | ||
| 52 | route.component = Layout | 56 | route.component = Layout |
| 53 | - } else if (route.component === 'ParentView') { | ||
| 54 | - route.component = ParentView | ||
| 55 | } else { | 57 | } else { |
| 56 | - route.component = loadView(route.component) | 58 | + route.component = ParentView |
| 57 | } | 59 | } |
| 60 | + } else { // 根节点 | ||
| 61 | + route.component = loadView(route.component) | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + // filterChildren | ||
| 65 | + if (isRewrite && route.children) { | ||
| 66 | + route.children = filterChildren(route.children) | ||
| 58 | } | 67 | } |
| 59 | if (route.children != null && route.children && route.children.length) { | 68 | if (route.children != null && route.children && route.children.length) { |
| 60 | route.children = filterAsyncRouter(route.children, route, isRewrite) | 69 | route.children = filterAsyncRouter(route.children, route, isRewrite) |
src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/SysAuthController.http
| @@ -9,12 +9,12 @@ Content-Type: application/json | @@ -9,12 +9,12 @@ Content-Type: application/json | ||
| 9 | "code": "1024" | 9 | "code": "1024" |
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | -### 请求 /get-info 接口 => 成功 | ||
| 13 | -GET {{baseUrl}}/get-info | 12 | +### 请求 /get-permission-info 接口 => 成功 |
| 13 | +GET {{baseUrl}}/get-permission-info | ||
| 14 | Authorization: Bearer {{token}} | 14 | Authorization: Bearer {{token}} |
| 15 | 15 | ||
| 16 | -### 请求 /get-routers 接口 => 成功 | ||
| 17 | -GET {{baseUrl}}/get-routers | 16 | +### 请求 /list-menus 接口 => 成功 |
| 17 | +GET {{baseUrl}}/list-menus | ||
| 18 | Authorization: Bearer {{token}} | 18 | Authorization: Bearer {{token}} |
| 19 | 19 | ||
| 20 | ### 请求 /druid/xxx 接口 => 失败 TODO 临时测试 | 20 | ### 请求 /druid/xxx 接口 => 失败 TODO 临时测试 |
src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/SysAuthController.java
| 1 | package cn.iocoder.dashboard.modules.system.controller.auth; | 1 | package cn.iocoder.dashboard.modules.system.controller.auth; |
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.common.pojo.CommonResult; | 3 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 4 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO; | ||
| 5 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO; | 4 | +import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthMenuRespVO; |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthPermissionInfoRespVO; | ||
| 6 | import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthLoginReqVO; | 6 | import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthLoginReqVO; |
| 7 | import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthLoginRespVO; | 7 | import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthLoginRespVO; |
| 8 | import cn.iocoder.dashboard.modules.system.service.auth.SysAuthService; | 8 | import cn.iocoder.dashboard.modules.system.service.auth.SysAuthService; |
| @@ -35,17 +35,17 @@ public class SysAuthController { | @@ -35,17 +35,17 @@ public class SysAuthController { | ||
| 35 | return success(SysAuthLoginRespVO.builder().token(token).build()); | 35 | return success(SysAuthLoginRespVO.builder().token(token).build()); |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | - @ApiOperation("获取登陆用户的信息") | ||
| 39 | - @GetMapping("/get-info") | ||
| 40 | - public CommonResult<SysAuthGetInfoRespVO> getInfo() { | ||
| 41 | - SysAuthGetInfoRespVO respVO = authService.getInfo(getLoginUserId(), getLoginUserRoleIds()); | 38 | + @ApiOperation("获取登陆用户的权限信息") |
| 39 | + @GetMapping("/get-permission-info") | ||
| 40 | + public CommonResult<SysAuthPermissionInfoRespVO> getPermissionInfo() { | ||
| 41 | + SysAuthPermissionInfoRespVO respVO = authService.getPermissionInfo(getLoginUserId(), getLoginUserRoleIds()); | ||
| 42 | return success(respVO); | 42 | return success(respVO); |
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | - @ApiOperation("获得菜单 Vue 路由") | ||
| 46 | - @GetMapping("get-routers") | ||
| 47 | - public CommonResult<List<SysAuthGetRouterRespVO>> getRouters() { | ||
| 48 | - List<SysAuthGetRouterRespVO> respVOList = authService.getRouters(getLoginUserId(), getLoginUserRoleIds()); | 45 | + @ApiOperation("获得登陆用户的菜单列表") |
| 46 | + @GetMapping("list-menus") | ||
| 47 | + public CommonResult<List<SysAuthMenuRespVO>> listMenus() { | ||
| 48 | + List<SysAuthMenuRespVO> respVOList = authService.listMenus(getLoginUserId(), getLoginUserRoleIds()); | ||
| 49 | return success(respVOList); | 49 | return success(respVOList); |
| 50 | } | 50 | } |
| 51 | 51 |
src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthGetRouterRespVO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthMenuRespVO.java
| 1 | package cn.iocoder.dashboard.modules.system.controller.auth.vo; | 1 | package cn.iocoder.dashboard.modules.system.controller.auth.vo; |
| 2 | 2 | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 3 | import lombok.AllArgsConstructor; | 4 | import lombok.AllArgsConstructor; |
| 4 | import lombok.Builder; | 5 | import lombok.Builder; |
| 5 | import lombok.Data; | 6 | import lombok.Data; |
| @@ -7,16 +8,12 @@ import lombok.NoArgsConstructor; | @@ -7,16 +8,12 @@ import lombok.NoArgsConstructor; | ||
| 7 | 8 | ||
| 8 | import java.util.List; | 9 | import java.util.List; |
| 9 | 10 | ||
| 10 | -/** | ||
| 11 | - * 路由配置信息 | ||
| 12 | - * | ||
| 13 | - * @author ruoyi | ||
| 14 | - */ | 11 | +@ApiModel("登陆用户的菜单信息 Response VO") |
| 15 | @Data | 12 | @Data |
| 16 | @NoArgsConstructor | 13 | @NoArgsConstructor |
| 17 | @AllArgsConstructor | 14 | @AllArgsConstructor |
| 18 | @Builder | 15 | @Builder |
| 19 | -public class SysAuthGetRouterRespVO { | 16 | +public class SysAuthMenuRespVO { |
| 20 | 17 | ||
| 21 | /** | 18 | /** |
| 22 | * 菜单编号 | 19 | * 菜单编号 |
| @@ -28,66 +25,27 @@ public class SysAuthGetRouterRespVO { | @@ -28,66 +25,27 @@ public class SysAuthGetRouterRespVO { | ||
| 28 | private Long parentId; | 25 | private Long parentId; |
| 29 | 26 | ||
| 30 | /** | 27 | /** |
| 31 | - * 路由名字 | 28 | + * 菜单名称 |
| 32 | */ | 29 | */ |
| 33 | - private String name; | 30 | + private String menuName; |
| 34 | 31 | ||
| 35 | /** | 32 | /** |
| 36 | * 路由地址 | 33 | * 路由地址 |
| 37 | */ | 34 | */ |
| 38 | private String path; | 35 | private String path; |
| 39 | - | ||
| 40 | - /** | ||
| 41 | - * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 | ||
| 42 | - */ | ||
| 43 | - private boolean hidden; | ||
| 44 | - | ||
| 45 | - /** | ||
| 46 | - * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 | ||
| 47 | - */ | ||
| 48 | - private String redirect; | ||
| 49 | - | ||
| 50 | /** | 36 | /** |
| 51 | * 组件地址 | 37 | * 组件地址 |
| 52 | */ | 38 | */ |
| 53 | private String component; | 39 | private String component; |
| 54 | 40 | ||
| 55 | /** | 41 | /** |
| 56 | - * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 | 42 | + * 菜单图标 |
| 57 | */ | 43 | */ |
| 58 | - private Boolean alwaysShow; | ||
| 59 | - | ||
| 60 | - /** | ||
| 61 | - * 其他元素 | ||
| 62 | - */ | ||
| 63 | - private MetaVO meta; | 44 | + private String icon; |
| 64 | 45 | ||
| 65 | /** | 46 | /** |
| 66 | * 子路由 | 47 | * 子路由 |
| 67 | */ | 48 | */ |
| 68 | - private List<SysAuthGetRouterRespVO> children; | ||
| 69 | - | ||
| 70 | - @Data | ||
| 71 | - @NoArgsConstructor | ||
| 72 | - @AllArgsConstructor | ||
| 73 | - @Builder | ||
| 74 | - public static class MetaVO { | ||
| 75 | - | ||
| 76 | - /** | ||
| 77 | - * 设置该路由在侧边栏和面包屑中展示的名字 | ||
| 78 | - */ | ||
| 79 | - private String title; | ||
| 80 | - | ||
| 81 | - /** | ||
| 82 | - * 设置该路由的图标,对应路径src/assets/icons/svg | ||
| 83 | - */ | ||
| 84 | - private String icon; | ||
| 85 | - | ||
| 86 | - /** | ||
| 87 | - * 设置为true,则不会被 <keep-alive>缓存 | ||
| 88 | - */ | ||
| 89 | - private boolean noCache; | ||
| 90 | - | ||
| 91 | - } | 49 | + private List<SysAuthMenuRespVO> children; |
| 92 | 50 | ||
| 93 | } | 51 | } |
src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthGetInfoRespVO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthPermissionInfoRespVO.java
| @@ -9,20 +9,20 @@ import lombok.NoArgsConstructor; | @@ -9,20 +9,20 @@ import lombok.NoArgsConstructor; | ||
| 9 | 9 | ||
| 10 | import java.util.Set; | 10 | import java.util.Set; |
| 11 | 11 | ||
| 12 | -@ApiModel("获得用户信息 Resp VO") | 12 | +@ApiModel(value = "登陆用户的权限信息 Response VO", description = "额外包括用户信息和角色列表") |
| 13 | @Data | 13 | @Data |
| 14 | @NoArgsConstructor | 14 | @NoArgsConstructor |
| 15 | @AllArgsConstructor | 15 | @AllArgsConstructor |
| 16 | @Builder | 16 | @Builder |
| 17 | -public class SysAuthGetInfoRespVO { | 17 | +public class SysAuthPermissionInfoRespVO { |
| 18 | 18 | ||
| 19 | @ApiModelProperty(value = "用户信息", required = true) | 19 | @ApiModelProperty(value = "用户信息", required = true) |
| 20 | private UserVO user; | 20 | private UserVO user; |
| 21 | 21 | ||
| 22 | - @ApiModelProperty(value = "角色权限数组", required = true) | 22 | + @ApiModelProperty(value = "角色标识数组", required = true) |
| 23 | private Set<String> roles; | 23 | private Set<String> roles; |
| 24 | 24 | ||
| 25 | - @ApiModelProperty(value = "菜单权限数组", required = true) | 25 | + @ApiModelProperty(value = "操作权限数组", required = true) |
| 26 | private Set<String> permissions; | 26 | private Set<String> permissions; |
| 27 | 27 | ||
| 28 | @ApiModel("用户信息 VO") | 28 | @ApiModel("用户信息 VO") |
src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java
| 1 | package cn.iocoder.dashboard.modules.system.convert.auth; | 1 | package cn.iocoder.dashboard.modules.system.convert.auth; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||
| 4 | import cn.iocoder.dashboard.framework.security.core.LoginUser; | 3 | import cn.iocoder.dashboard.framework.security.core.LoginUser; |
| 5 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO; | ||
| 6 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO; | 4 | +import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthPermissionInfoRespVO; |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthMenuRespVO; | ||
| 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; | 6 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; |
| 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; |
| 9 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; |
| 10 | -import cn.iocoder.dashboard.modules.system.enums.permission.MenuIdEnum; | ||
| 11 | -import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum; | ||
| 12 | import cn.iocoder.dashboard.util.collection.CollectionUtils; | 9 | import cn.iocoder.dashboard.util.collection.CollectionUtils; |
| 13 | -import jodd.util.StringUtil; | ||
| 14 | -import org.apache.commons.lang3.StringUtils; | ||
| 15 | import org.mapstruct.Mapper; | 10 | import org.mapstruct.Mapper; |
| 16 | import org.mapstruct.Mapping; | 11 | import org.mapstruct.Mapping; |
| 17 | import org.mapstruct.factory.Mappers; | 12 | import org.mapstruct.factory.Mappers; |
| @@ -21,107 +16,19 @@ import java.util.List; | @@ -21,107 +16,19 @@ import java.util.List; | ||
| 21 | @Mapper | 16 | @Mapper |
| 22 | public interface SysAuthConvert { | 17 | public interface SysAuthConvert { |
| 23 | 18 | ||
| 24 | - /** Layout组件标识 */ | ||
| 25 | - public final static String LAYOUT = "Layout"; | ||
| 26 | - | ||
| 27 | - /** ParentView组件标识 */ | ||
| 28 | - public final static String PARENT_VIEW = "ParentView"; | ||
| 29 | - | ||
| 30 | SysAuthConvert INSTANCE = Mappers.getMapper(SysAuthConvert.class); | 19 | SysAuthConvert INSTANCE = Mappers.getMapper(SysAuthConvert.class); |
| 31 | 20 | ||
| 32 | @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相同,但是含义不同,忽略 | 21 | @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相同,但是含义不同,忽略 |
| 33 | LoginUser convert(SysUserDO bean); | 22 | LoginUser convert(SysUserDO bean); |
| 34 | 23 | ||
| 35 | - default SysAuthGetInfoRespVO convert(SysUserDO user, List<SysRoleDO> roleList, List<SysMenuDO> menuList) { | ||
| 36 | - return SysAuthGetInfoRespVO.builder() | ||
| 37 | - .user(SysAuthGetInfoRespVO.UserVO.builder().nickname(user.getNickname()).avatar(user.getAvatar()).build()) | 24 | + default SysAuthPermissionInfoRespVO convert(SysUserDO user, List<SysRoleDO> roleList, List<SysMenuDO> menuList) { |
| 25 | + return SysAuthPermissionInfoRespVO.builder() | ||
| 26 | + .user(SysAuthPermissionInfoRespVO.UserVO.builder().nickname(user.getNickname()).avatar(user.getAvatar()).build()) | ||
| 38 | .roles(CollectionUtils.convertSet(roleList, SysRoleDO::getRoleKey)) | 27 | .roles(CollectionUtils.convertSet(roleList, SysRoleDO::getRoleKey)) |
| 39 | - .permissions(CollectionUtils.convertSet(menuList, SysMenuDO::getPerms)) | 28 | + .permissions(CollectionUtils.convertSet(menuList, SysMenuDO::getPermission)) |
| 40 | .build(); | 29 | .build(); |
| 41 | } | 30 | } |
| 42 | 31 | ||
| 43 | - default SysAuthGetRouterRespVO convertTreeNode(SysMenuDO menu) { | ||
| 44 | - SysAuthGetRouterRespVO.SysAuthGetRouterRespVOBuilder respVOBuilder = SysAuthGetRouterRespVO.builder(); | ||
| 45 | - respVOBuilder.menuId(menu.getMenuId()).parentId(menu.getParentId()) | ||
| 46 | - .hidden("1".equals(menu.getVisible())) // TODO 芋艿:需要处理 | ||
| 47 | - .name(getRouteName(menu)).path(menu.getPath()).component(getComponent(menu)) | ||
| 48 | - .meta(SysAuthGetRouterRespVO.MetaVO.builder().title(menu.getMenuName()).icon(menu.getIcon()) | ||
| 49 | - .noCache("1".equals(menu.getIsCache())).build()) | ||
| 50 | - ; | ||
| 51 | - return respVOBuilder.build(); | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - | ||
| 55 | - | ||
| 56 | - // TODO 芋艿:需要预处理。存储的时候 | ||
| 57 | - default String getRouteName(SysMenuDO menu) { | ||
| 58 | - String routerName = StringUtil.capitalize(menu.getPath()); // TODO 芋艿:看看怎么去除掉 | ||
| 59 | - // 非外链并且是一级目录(类型为目录) | ||
| 60 | - if (isMenuFrame(menu)) { | ||
| 61 | - routerName = StringUtils.EMPTY; | ||
| 62 | - } | ||
| 63 | - return routerName; | ||
| 64 | - } | ||
| 65 | - | ||
| 66 | - /** | ||
| 67 | - * 是否为菜单内部跳转 | ||
| 68 | - * | ||
| 69 | - * @param menu 菜单信息 | ||
| 70 | - * @return 是否 | ||
| 71 | - */ | ||
| 72 | - // TODO 芋艿:思考下是不是可以重构下 | ||
| 73 | - default boolean isMenuFrame(SysMenuDO menu) { | ||
| 74 | - return MenuIdEnum.ROOT.getId().equals(menu.getParentId()) | ||
| 75 | - && MenuTypeEnum.MENU.getType().equals(menu.getMenuType()) | ||
| 76 | - && CommonStatusEnum.ENABLE.getStatus().equals(menu.getIsFrame()); // TODO 芋艿:思考是不是用这个好 | ||
| 77 | - } | ||
| 78 | - | ||
| 79 | -// /** // TODO 芋艿:后面重构下 | ||
| 80 | -// * 获取路由地址 | ||
| 81 | -// * | ||
| 82 | -// * @param menu 菜单信息 | ||
| 83 | -// * @return 路由地址 | ||
| 84 | -// */ | ||
| 85 | -// default String getRouterPath(SysMenuDO menu) { | ||
| 86 | -// String routerPath = menu.getPath(); | ||
| 87 | -// // 非外链并且是一级目录(类型为目录) | ||
| 88 | -// if (MenuIdEnum.ROOT.getId().equals(menu.getParentId()) | ||
| 89 | -// && MenuTypeEnum.MENU.getType().equals(menu.getMenuType()) | ||
| 90 | -// && CommonStatusEnum.DISABLE.getStatus().equals(menu.getIsFrame())) { | ||
| 91 | -// routerPath = "/" + menu.getPath(); | ||
| 92 | -// } | ||
| 93 | -// // 非外链并且是一级目录(类型为菜单) | ||
| 94 | -// else if (isMenuFrame(menu)) { | ||
| 95 | -// routerPath = "/"; | ||
| 96 | -// } | ||
| 97 | -// return routerPath; | ||
| 98 | -// } | ||
| 99 | - | ||
| 100 | - /** | ||
| 101 | - * 获取组件信息 | ||
| 102 | - * | ||
| 103 | - * @param menu 菜单信息 | ||
| 104 | - * @return 组件信息 | ||
| 105 | - */ | ||
| 106 | - default String getComponent(SysMenuDO menu) { | ||
| 107 | - String component = LAYOUT; | ||
| 108 | - if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { | ||
| 109 | - component = menu.getComponent(); | ||
| 110 | - } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) { | ||
| 111 | - component = PARENT_VIEW; | ||
| 112 | - } | ||
| 113 | - return component; | ||
| 114 | - } | ||
| 115 | - | ||
| 116 | - /** | ||
| 117 | - * 是否为parent_view组件 | ||
| 118 | - * | ||
| 119 | - * @param menu 菜单信息 | ||
| 120 | - * @return 结果 | ||
| 121 | - */ | ||
| 122 | - default boolean isParentView(SysMenuDO menu) { | ||
| 123 | - return !MenuIdEnum.ROOT.getId().equals(menu.getParentId()) | ||
| 124 | - && MenuTypeEnum.DIR.getType().equals(menu.getMenuType()); | ||
| 125 | - } | 32 | + SysAuthMenuRespVO convertTreeNode(SysMenuDO menu); |
| 126 | 33 | ||
| 127 | } | 34 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/permission/SysMenuDO.java
| @@ -56,27 +56,12 @@ public class SysMenuDO extends BaseDO { | @@ -56,27 +56,12 @@ public class SysMenuDO extends BaseDO { | ||
| 56 | private String component; | 56 | private String component; |
| 57 | 57 | ||
| 58 | /** | 58 | /** |
| 59 | - * 是否为外链(0是 1否) | ||
| 60 | - */ | ||
| 61 | - private String isFrame; | ||
| 62 | - | ||
| 63 | - /** | ||
| 64 | - * 是否缓存(0缓存 1不缓存) | ||
| 65 | - */ | ||
| 66 | - private String isCache; | ||
| 67 | - | ||
| 68 | - /** | ||
| 69 | * 类型(M目录 C菜单 F按钮) | 59 | * 类型(M目录 C菜单 F按钮) |
| 70 | */ | 60 | */ |
| 71 | @NotBlank(message = "菜单类型不能为空") | 61 | @NotBlank(message = "菜单类型不能为空") |
| 72 | private String menuType; | 62 | private String menuType; |
| 73 | 63 | ||
| 74 | /** | 64 | /** |
| 75 | - * 显示状态(0显示 1隐藏) | ||
| 76 | - */ | ||
| 77 | - private String visible; | ||
| 78 | - | ||
| 79 | - /** | ||
| 80 | * 菜单状态(0显示 1隐藏) | 65 | * 菜单状态(0显示 1隐藏) |
| 81 | */ | 66 | */ |
| 82 | private String status; | 67 | private String status; |
| @@ -85,7 +70,7 @@ public class SysMenuDO extends BaseDO { | @@ -85,7 +70,7 @@ public class SysMenuDO extends BaseDO { | ||
| 85 | * 权限字符串 | 70 | * 权限字符串 |
| 86 | */ | 71 | */ |
| 87 | @Size(max = 100, message = "权限标识长度不能超过100个字符") | 72 | @Size(max = 100, message = "权限标识长度不能超过100个字符") |
| 88 | - private String perms; | 73 | + private String permission; |
| 89 | 74 | ||
| 90 | /** | 75 | /** |
| 91 | * 菜单图标 | 76 | * 菜单图标 |
src/main/java/cn/iocoder/dashboard/modules/system/service/auth/SysAuthService.java
| 1 | package cn.iocoder.dashboard.modules.system.service.auth; | 1 | package cn.iocoder.dashboard.modules.system.service.auth; |
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.framework.security.core.service.SecurityFrameworkService; | 3 | import cn.iocoder.dashboard.framework.security.core.service.SecurityFrameworkService; |
| 4 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO; | ||
| 5 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO; | 4 | +import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthPermissionInfoRespVO; |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthMenuRespVO; | ||
| 6 | 6 | ||
| 7 | import java.util.List; | 7 | import java.util.List; |
| 8 | import java.util.Set; | 8 | import java.util.Set; |
| @@ -28,7 +28,7 @@ public interface SysAuthService extends SecurityFrameworkService { | @@ -28,7 +28,7 @@ public interface SysAuthService extends SecurityFrameworkService { | ||
| 28 | * @param roleIds 用户拥有的角色编号数组 | 28 | * @param roleIds 用户拥有的角色编号数组 |
| 29 | * @return 用户的信息,包括角色权限和菜单权限 | 29 | * @return 用户的信息,包括角色权限和菜单权限 |
| 30 | */ | 30 | */ |
| 31 | - SysAuthGetInfoRespVO getInfo(Long userId, Set<Long> roleIds); | 31 | + SysAuthPermissionInfoRespVO getPermissionInfo(Long userId, Set<Long> roleIds); |
| 32 | 32 | ||
| 33 | /** | 33 | /** |
| 34 | * 获得用户的菜单 Vue 路由 | 34 | * 获得用户的菜单 Vue 路由 |
| @@ -40,6 +40,6 @@ public interface SysAuthService extends SecurityFrameworkService { | @@ -40,6 +40,6 @@ public interface SysAuthService extends SecurityFrameworkService { | ||
| 40 | * @param roleIds 用户拥有的角色编号数组 | 40 | * @param roleIds 用户拥有的角色编号数组 |
| 41 | * @return 菜单 Vue 路由 | 41 | * @return 菜单 Vue 路由 |
| 42 | */ | 42 | */ |
| 43 | - List<SysAuthGetRouterRespVO> getRouters(Long userId, Set<Long> roleIds); | 43 | + List<SysAuthMenuRespVO> listMenus(Long userId, Set<Long> roleIds); |
| 44 | 44 | ||
| 45 | } | 45 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java
| @@ -5,8 +5,8 @@ import cn.hutool.core.util.StrUtil; | @@ -5,8 +5,8 @@ import cn.hutool.core.util.StrUtil; | ||
| 5 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | 5 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 6 | import cn.iocoder.dashboard.framework.security.config.SecurityProperties; | 6 | import cn.iocoder.dashboard.framework.security.config.SecurityProperties; |
| 7 | import cn.iocoder.dashboard.framework.security.core.LoginUser; | 7 | import cn.iocoder.dashboard.framework.security.core.LoginUser; |
| 8 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO; | ||
| 9 | -import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO; | 8 | +import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthPermissionInfoRespVO; |
| 9 | +import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthMenuRespVO; | ||
| 10 | import cn.iocoder.dashboard.modules.system.convert.auth.SysAuthConvert; | 10 | import cn.iocoder.dashboard.modules.system.convert.auth.SysAuthConvert; |
| 11 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; | 11 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; |
| 12 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; | 12 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; |
| @@ -225,7 +225,7 @@ public class SysAuthServiceImpl implements SysAuthService { | @@ -225,7 +225,7 @@ public class SysAuthServiceImpl implements SysAuthService { | ||
| 225 | } | 225 | } |
| 226 | 226 | ||
| 227 | @Override | 227 | @Override |
| 228 | - public SysAuthGetInfoRespVO getInfo(Long userId, Set<Long> roleIds) { | 228 | + public SysAuthPermissionInfoRespVO getPermissionInfo(Long userId, Set<Long> roleIds) { |
| 229 | // 获得用户信息 | 229 | // 获得用户信息 |
| 230 | SysUserDO user = userService.getUser(userId); | 230 | SysUserDO user = userService.getUser(userId); |
| 231 | if (user == null) { | 231 | if (user == null) { |
| @@ -242,7 +242,7 @@ public class SysAuthServiceImpl implements SysAuthService { | @@ -242,7 +242,7 @@ public class SysAuthServiceImpl implements SysAuthService { | ||
| 242 | } | 242 | } |
| 243 | 243 | ||
| 244 | @Override | 244 | @Override |
| 245 | - public List<SysAuthGetRouterRespVO> getRouters(Long userId, Set<Long> roleIds) { | 245 | + public List<SysAuthMenuRespVO> listMenus(Long userId, Set<Long> roleIds) { |
| 246 | List<SysMenuDO> menuList = permissionService.listRoleMenusFromCache(roleIds, | 246 | List<SysMenuDO> menuList = permissionService.listRoleMenusFromCache(roleIds, |
| 247 | SetUtils.asSet(MenuTypeEnum.DIR.getType(), MenuTypeEnum.MENU.getType()), | 247 | SetUtils.asSet(MenuTypeEnum.DIR.getType(), MenuTypeEnum.MENU.getType()), |
| 248 | SetUtils.asSet(CommonStatusEnum.ENABLE.getStatus())); | 248 | SetUtils.asSet(CommonStatusEnum.ENABLE.getStatus())); |
| @@ -250,17 +250,17 @@ public class SysAuthServiceImpl implements SysAuthService { | @@ -250,17 +250,17 @@ public class SysAuthServiceImpl implements SysAuthService { | ||
| 250 | return buildRouterTree(menuList); | 250 | return buildRouterTree(menuList); |
| 251 | } | 251 | } |
| 252 | 252 | ||
| 253 | - private static List<SysAuthGetRouterRespVO> buildRouterTree(List<SysMenuDO> menuList) { | 253 | + private static List<SysAuthMenuRespVO> buildRouterTree(List<SysMenuDO> menuList) { |
| 254 | // 排序,保证菜单的有序性 | 254 | // 排序,保证菜单的有序性 |
| 255 | menuList.sort(Comparator.comparing(SysMenuDO::getOrderNum)); | 255 | menuList.sort(Comparator.comparing(SysMenuDO::getOrderNum)); |
| 256 | // 构建菜单树 | 256 | // 构建菜单树 |
| 257 | // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 | 257 | // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 |
| 258 | - Map<Long, SysAuthGetRouterRespVO> treeNodeMap = new LinkedHashMap<>(); | 258 | + Map<Long, SysAuthMenuRespVO> treeNodeMap = new LinkedHashMap<>(); |
| 259 | menuList.forEach(menu -> treeNodeMap.put(menu.getMenuId(), SysAuthConvert.INSTANCE.convertTreeNode(menu))); | 259 | menuList.forEach(menu -> treeNodeMap.put(menu.getMenuId(), SysAuthConvert.INSTANCE.convertTreeNode(menu))); |
| 260 | // 处理父子关系 | 260 | // 处理父子关系 |
| 261 | treeNodeMap.values().stream().filter(node -> !node.getParentId().equals(MenuIdEnum.ROOT.getId())).forEach((childNode) -> { | 261 | treeNodeMap.values().stream().filter(node -> !node.getParentId().equals(MenuIdEnum.ROOT.getId())).forEach((childNode) -> { |
| 262 | // 获得父节点 | 262 | // 获得父节点 |
| 263 | - SysAuthGetRouterRespVO parentNode = treeNodeMap.get(childNode.getParentId()); | 263 | + SysAuthMenuRespVO parentNode = treeNodeMap.get(childNode.getParentId()); |
| 264 | if (parentNode == null) { | 264 | if (parentNode == null) { |
| 265 | log.error("[buildRouterTree][resource({}) 找不到父资源({})]", childNode.getMenuId(), childNode.getParentId()); | 265 | log.error("[buildRouterTree][resource({}) 找不到父资源({})]", childNode.getMenuId(), childNode.getParentId()); |
| 266 | return; | 266 | return; |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java
| @@ -34,7 +34,7 @@ public class SysMenuServiceImpl implements SysMenuService { | @@ -34,7 +34,7 @@ public class SysMenuServiceImpl implements SysMenuService { | ||
| 34 | private volatile Map<Long, SysMenuDO> menuCache; | 34 | private volatile Map<Long, SysMenuDO> menuCache; |
| 35 | /** | 35 | /** |
| 36 | * 权限与菜单缓存 | 36 | * 权限与菜单缓存 |
| 37 | - * key:权限 {@link SysMenuDO#getPerms()} | 37 | + * key:权限 {@link SysMenuDO#getPermission()} |
| 38 | * value:SysMenuDO 数组,因为一个权限可能对应多个 SysMenuDO 对象 | 38 | * value:SysMenuDO 数组,因为一个权限可能对应多个 SysMenuDO 对象 |
| 39 | * | 39 | * |
| 40 | * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向 | 40 | * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向 |
| @@ -55,7 +55,7 @@ public class SysMenuServiceImpl implements SysMenuService { | @@ -55,7 +55,7 @@ public class SysMenuServiceImpl implements SysMenuService { | ||
| 55 | ImmutableMultimap.Builder<String, SysMenuDO> permMenuCacheBuilder = ImmutableMultimap.builder(); | 55 | ImmutableMultimap.Builder<String, SysMenuDO> permMenuCacheBuilder = ImmutableMultimap.builder(); |
| 56 | menuList.forEach(menuDO -> { | 56 | menuList.forEach(menuDO -> { |
| 57 | menuCacheBuilder.put(menuDO.getMenuId(), menuDO); | 57 | menuCacheBuilder.put(menuDO.getMenuId(), menuDO); |
| 58 | - permMenuCacheBuilder.put(menuDO.getPerms(), menuDO); | 58 | + permMenuCacheBuilder.put(menuDO.getPermission(), menuDO); |
| 59 | }); | 59 | }); |
| 60 | menuCache = menuCacheBuilder.build(); | 60 | menuCache = menuCacheBuilder.build(); |
| 61 | permMenuCache = permMenuCacheBuilder.build(); | 61 | permMenuCache = permMenuCacheBuilder.build(); |