递归查询菜单管理
parent
c152425dd4
commit
04ab8fc684
|
@ -122,7 +122,7 @@ public class SysProfileController extends BaseController {
|
|||
return error("文件服务异常,请联系管理员");
|
||||
}
|
||||
String url = fileResult.getData().getUrl();
|
||||
if (userService.updateUserAvatar(loginUser.getUsername(), url)) {
|
||||
if (userService.updateUserAvatar(loginUser.getUsernameOrEmail(), url)) {
|
||||
// 更新缓存用户头像
|
||||
loginUser.getSysUser().setAvatar(url);
|
||||
tokenService.setLoginUser(loginUser);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.muyu.system.controller;
|
||||
|
||||
import com.muyu.common.core.constant.CacheConstants;
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
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.log.annotation.Log;
|
||||
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.RequiresPermissions;
|
||||
import com.muyu.common.security.utils.SecurityUtils;
|
||||
|
@ -56,6 +58,10 @@ public class SysUserController extends BaseController {
|
|||
@Autowired
|
||||
private SysConfigService configService;
|
||||
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
@Autowired
|
||||
private SysUserOnlineService userOnlineService;
|
||||
/**
|
||||
* 获取用户列表
|
||||
*/
|
||||
|
|
|
@ -59,18 +59,68 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
* @return 菜单列表
|
||||
*/
|
||||
@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;
|
||||
|
||||
// 判断用户是否为管理员
|
||||
boolean isAdmin = SysUser.isAdmin(userId);
|
||||
|
||||
// 管理员显示所有菜单信息
|
||||
if (SysUser.isAdmin(userId)) {
|
||||
if (isAdmin) {
|
||||
menuList = menuMapper.selectMenuList(menu);
|
||||
} else {
|
||||
// 非管理员情况下,将用户ID添加至参数中,查询用户对应菜单信息
|
||||
menu.getParams().put("userId", userId);
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过递归找节点(父级菜单)
|
||||
*/
|
||||
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查询权限
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue