1. 简化 ruoyi 获取菜单列表时,和前端耦合性比较重的情况

2. 删除 MenuDO 表非关键性字段,进一步简化模型
This commit is contained in:
YunaiV
2021-01-07 01:57:19 +08:00
parent c9372b0a5c
commit 3bf173d744
15 changed files with 131 additions and 329 deletions

View File

@@ -1,8 +1,8 @@
package cn.iocoder.dashboard.modules.system.service.auth;
import cn.iocoder.dashboard.framework.security.core.service.SecurityFrameworkService;
import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO;
import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO;
import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthPermissionInfoRespVO;
import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthMenuRespVO;
import java.util.List;
import java.util.Set;
@@ -28,7 +28,7 @@ public interface SysAuthService extends SecurityFrameworkService {
* @param roleIds 用户拥有的角色编号数组
* @return 用户的信息,包括角色权限和菜单权限
*/
SysAuthGetInfoRespVO getInfo(Long userId, Set<Long> roleIds);
SysAuthPermissionInfoRespVO getPermissionInfo(Long userId, Set<Long> roleIds);
/**
* 获得用户的菜单 Vue 路由
@@ -40,6 +40,6 @@ public interface SysAuthService extends SecurityFrameworkService {
* @param roleIds 用户拥有的角色编号数组
* @return 菜单 Vue 路由
*/
List<SysAuthGetRouterRespVO> getRouters(Long userId, Set<Long> roleIds);
List<SysAuthMenuRespVO> listMenus(Long userId, Set<Long> roleIds);
}

View File

@@ -5,8 +5,8 @@ import cn.hutool.core.util.StrUtil;
import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
import cn.iocoder.dashboard.framework.security.config.SecurityProperties;
import cn.iocoder.dashboard.framework.security.core.LoginUser;
import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO;
import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO;
import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthPermissionInfoRespVO;
import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthMenuRespVO;
import cn.iocoder.dashboard.modules.system.convert.auth.SysAuthConvert;
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO;
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO;
@@ -225,7 +225,7 @@ public class SysAuthServiceImpl implements SysAuthService {
}
@Override
public SysAuthGetInfoRespVO getInfo(Long userId, Set<Long> roleIds) {
public SysAuthPermissionInfoRespVO getPermissionInfo(Long userId, Set<Long> roleIds) {
// 获得用户信息
SysUserDO user = userService.getUser(userId);
if (user == null) {
@@ -242,7 +242,7 @@ public class SysAuthServiceImpl implements SysAuthService {
}
@Override
public List<SysAuthGetRouterRespVO> getRouters(Long userId, Set<Long> roleIds) {
public List<SysAuthMenuRespVO> listMenus(Long userId, Set<Long> roleIds) {
List<SysMenuDO> menuList = permissionService.listRoleMenusFromCache(roleIds,
SetUtils.asSet(MenuTypeEnum.DIR.getType(), MenuTypeEnum.MENU.getType()),
SetUtils.asSet(CommonStatusEnum.ENABLE.getStatus()));
@@ -250,17 +250,17 @@ public class SysAuthServiceImpl implements SysAuthService {
return buildRouterTree(menuList);
}
private static List<SysAuthGetRouterRespVO> buildRouterTree(List<SysMenuDO> menuList) {
private static List<SysAuthMenuRespVO> buildRouterTree(List<SysMenuDO> menuList) {
// 排序,保证菜单的有序性
menuList.sort(Comparator.comparing(SysMenuDO::getOrderNum));
// 构建菜单树
// 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。
Map<Long, SysAuthGetRouterRespVO> treeNodeMap = new LinkedHashMap<>();
Map<Long, SysAuthMenuRespVO> treeNodeMap = new LinkedHashMap<>();
menuList.forEach(menu -> treeNodeMap.put(menu.getMenuId(), SysAuthConvert.INSTANCE.convertTreeNode(menu)));
// 处理父子关系
treeNodeMap.values().stream().filter(node -> !node.getParentId().equals(MenuIdEnum.ROOT.getId())).forEach((childNode) -> {
// 获得父节点
SysAuthGetRouterRespVO parentNode = treeNodeMap.get(childNode.getParentId());
SysAuthMenuRespVO parentNode = treeNodeMap.get(childNode.getParentId());
if (parentNode == null) {
log.error("[buildRouterTree][resource({}) 找不到父资源({})]", childNode.getMenuId(), childNode.getParentId());
return;

View File

@@ -34,7 +34,7 @@ public class SysMenuServiceImpl implements SysMenuService {
private volatile Map<Long, SysMenuDO> menuCache;
/**
* 权限与菜单缓存
* key权限 {@link SysMenuDO#getPerms()}
* key权限 {@link SysMenuDO#getPermission()}
* valueSysMenuDO 数组,因为一个权限可能对应多个 SysMenuDO 对象
*
* 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
@@ -55,7 +55,7 @@ public class SysMenuServiceImpl implements SysMenuService {
ImmutableMultimap.Builder<String, SysMenuDO> permMenuCacheBuilder = ImmutableMultimap.builder();
menuList.forEach(menuDO -> {
menuCacheBuilder.put(menuDO.getMenuId(), menuDO);
permMenuCacheBuilder.put(menuDO.getPerms(), menuDO);
permMenuCacheBuilder.put(menuDO.getPermission(), menuDO);
});
menuCache = menuCacheBuilder.build();
permMenuCache = permMenuCacheBuilder.build();