1. 简化 ruoyi 获取菜单列表时,和前端耦合性比较重的情况
2. 删除 MenuDO 表非关键性字段,进一步简化模型
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -34,7 +34,7 @@ public class SysMenuServiceImpl implements SysMenuService {
|
||||
private volatile Map<Long, SysMenuDO> menuCache;
|
||||
/**
|
||||
* 权限与菜单缓存
|
||||
* key:权限 {@link SysMenuDO#getPerms()}
|
||||
* key:权限 {@link SysMenuDO#getPermission()}
|
||||
* value:SysMenuDO 数组,因为一个权限可能对应多个 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();
|
||||
|
||||
Reference in New Issue
Block a user