递归查询菜单管理

ruoyi_test
sunshine7058 2024-04-12 21:15:08 +08:00
parent c152425dd4
commit 04ab8fc684
3 changed files with 59 additions and 3 deletions

View File

@ -122,7 +122,7 @@ public class SysProfileController extends BaseController {
return error("文件服务异常,请联系管理员"); return error("文件服务异常,请联系管理员");
} }
String url = fileResult.getData().getUrl(); String url = fileResult.getData().getUrl();
if (userService.updateUserAvatar(loginUser.getUsername(), url)) { if (userService.updateUserAvatar(loginUser.getUsernameOrEmail(), url)) {
// 更新缓存用户头像 // 更新缓存用户头像
loginUser.getSysUser().setAvatar(url); loginUser.getSysUser().setAvatar(url);
tokenService.setLoginUser(loginUser); tokenService.setLoginUser(loginUser);

View File

@ -1,5 +1,6 @@
package com.muyu.system.controller; package com.muyu.system.controller;
import com.muyu.common.core.constant.CacheConstants;
import com.muyu.common.core.domain.Result; import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.core.utils.poi.ExcelUtil; import com.muyu.common.core.utils.poi.ExcelUtil;
@ -7,6 +8,7 @@ import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.core.web.page.TableDataInfo; import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.common.log.annotation.Log; import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType; import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.redis.service.RedisService;
import com.muyu.common.security.annotation.InnerAuth; import com.muyu.common.security.annotation.InnerAuth;
import com.muyu.common.security.annotation.RequiresPermissions; import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
@ -56,6 +58,10 @@ public class SysUserController extends BaseController {
@Autowired @Autowired
private SysConfigService configService; private SysConfigService configService;
@Autowired
private RedisService redisService;
@Autowired
private SysUserOnlineService userOnlineService;
/** /**
* *
*/ */

View File

@ -59,18 +59,68 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* @return * @return
*/ */
@Override @Override
public List<SysMenu> selectMenuList (SysMenu menu, Long userId) { public List<SysMenu> selectMenuList(SysMenu menu, Long userId) {
// 初始化返回的菜单列表和临时存储父菜单的列表
List<SysMenu> allMenuList = null;;
List<SysMenu> menuList = null; List<SysMenu> menuList = null;
// 判断用户是否为管理员
boolean isAdmin = SysUser.isAdmin(userId);
// 管理员显示所有菜单信息 // 管理员显示所有菜单信息
if (SysUser.isAdmin(userId)) { if (isAdmin) {
menuList = menuMapper.selectMenuList(menu); menuList = menuMapper.selectMenuList(menu);
} else { } else {
// 非管理员情况下将用户ID添加至参数中查询用户对应菜单信息
menu.getParams().put("userId", userId); menu.getParams().put("userId", userId);
menuList = menuMapper.selectMenuListByUserId(menu); menuList = menuMapper.selectMenuListByUserId(menu);
} }
// 当查询结果仅有一个菜单时,进行以下操作:
if (menuList.size() == 1) {
SysMenu sysMenu = menuList.get(0);
// 递归查找当前菜单的所有父级菜单并加入到menuList中
this.getMenuList(menuList, sysMenu);
// 创建一个新的菜单对象,设置其权限与传入菜单相同
SysMenu newMenu = new SysMenu();
newMenu.setPerms(menu.getPerms());
// 根据用户是否为管理员,查询全部菜单或用户对应菜单
allMenuList = isAdmin ? menuMapper.selectMenuList(null) : menuMapper.selectMenuListByUserId(newMenu);
// 查找当前菜单的子节点
List<SysMenu> childList = this.getChildList(allMenuList, sysMenu);
// 将子节点列表合并到最终返回的菜单列表中
menuList.addAll(childList);
}
// 返回处理后的菜单列表
return menuList; return menuList;
} }
/**
*
*/
public void getMenuList(List<SysMenu> menuList, SysMenu menu) {
// 当父菜单ID为0即顶级菜单停止递归
if (menu.getParentId().equals(0L)) {
return;
} else {
// 查询当前菜单的父级菜单
SysMenu sysMenu = this.selectMenuById(menu.getParentId());
// 将父级菜单添加到menuList中
menuList.add(sysMenu);
// 继续递归查找父级菜单的上级菜单
getMenuList(menuList, sysMenu);
}
}
/** /**
* ID * ID
* *