作者 RuoYi

根据用户权限加载菜单数据树形结构

@@ -14,8 +14,11 @@ import org.springframework.web.bind.annotation.RequestMapping; @@ -14,8 +14,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
14 import org.springframework.web.bind.annotation.RestController; 14 import org.springframework.web.bind.annotation.RestController;
15 import com.ruoyi.common.constant.UserConstants; 15 import com.ruoyi.common.constant.UserConstants;
16 import com.ruoyi.common.utils.SecurityUtils; 16 import com.ruoyi.common.utils.SecurityUtils;
  17 +import com.ruoyi.common.utils.ServletUtils;
17 import com.ruoyi.framework.aspectj.lang.annotation.Log; 18 import com.ruoyi.framework.aspectj.lang.annotation.Log;
18 import com.ruoyi.framework.aspectj.lang.enums.BusinessType; 19 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
  20 +import com.ruoyi.framework.security.LoginUser;
  21 +import com.ruoyi.framework.security.service.TokenService;
19 import com.ruoyi.framework.web.controller.BaseController; 22 import com.ruoyi.framework.web.controller.BaseController;
20 import com.ruoyi.framework.web.domain.AjaxResult; 23 import com.ruoyi.framework.web.domain.AjaxResult;
21 import com.ruoyi.project.system.domain.SysMenu; 24 import com.ruoyi.project.system.domain.SysMenu;
@@ -33,6 +36,9 @@ public class SysMenuController extends BaseController @@ -33,6 +36,9 @@ public class SysMenuController extends BaseController
33 @Autowired 36 @Autowired
34 private ISysMenuService menuService; 37 private ISysMenuService menuService;
35 38
  39 + @Autowired
  40 + private TokenService tokenService;
  41 +
36 /** 42 /**
37 * 获取菜单列表 43 * 获取菜单列表
38 */ 44 */
@@ -40,7 +46,9 @@ public class SysMenuController extends BaseController @@ -40,7 +46,9 @@ public class SysMenuController extends BaseController
40 @GetMapping("/list") 46 @GetMapping("/list")
41 public AjaxResult list(SysMenu menu) 47 public AjaxResult list(SysMenu menu)
42 { 48 {
43 - List<SysMenu> menus = menuService.selectMenuList(menu); 49 + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
  50 + Long userId = loginUser.getUser().getUserId();
  51 + List<SysMenu> menus = menuService.selectMenuList(menu, userId);
44 return AjaxResult.success(menuService.buildMenuTree(menus)); 52 return AjaxResult.success(menuService.buildMenuTree(menus));
45 } 53 }
46 54
@@ -58,9 +66,11 @@ public class SysMenuController extends BaseController @@ -58,9 +66,11 @@ public class SysMenuController extends BaseController
58 * 获取菜单下拉树列表 66 * 获取菜单下拉树列表
59 */ 67 */
60 @GetMapping("/treeselect") 68 @GetMapping("/treeselect")
61 - public AjaxResult treeselect(SysMenu dept) 69 + public AjaxResult treeselect(SysMenu menu)
62 { 70 {
63 - List<SysMenu> menus = menuService.selectMenuList(dept); 71 + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
  72 + Long userId = loginUser.getUser().getUserId();
  73 + List<SysMenu> menus = menuService.selectMenuList(menu, userId);
64 return AjaxResult.success(menuService.buildMenuTreeSelect(menus)); 74 return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
65 } 75 }
66 76
@@ -27,6 +27,14 @@ public interface SysMenuMapper @@ -27,6 +27,14 @@ public interface SysMenuMapper
27 public List<String> selectMenuPerms(); 27 public List<String> selectMenuPerms();
28 28
29 /** 29 /**
  30 + * 根据用户查询系统菜单列表
  31 + *
  32 + * @param menu 菜单信息
  33 + * @return 菜单列表
  34 + */
  35 + public List<SysMenu> selectMenuListByUserId(SysMenu menu);
  36 +
  37 + /**
30 * 根据用户ID查询权限 38 * 根据用户ID查询权限
31 * 39 *
32 * @param userId 用户ID 40 * @param userId 用户ID
@@ -14,12 +14,13 @@ import com.ruoyi.project.system.domain.vo.RouterVo; @@ -14,12 +14,13 @@ import com.ruoyi.project.system.domain.vo.RouterVo;
14 public interface ISysMenuService 14 public interface ISysMenuService
15 { 15 {
16 /** 16 /**
17 - * 查询系统菜单列表 17 + * 根据用户查询系统菜单列表
18 * 18 *
19 * @param menu 菜单信息 19 * @param menu 菜单信息
  20 + * @param userId 用户ID
20 * @return 菜单列表 21 * @return 菜单列表
21 */ 22 */
22 - public List<SysMenu> selectMenuList(SysMenu menu); 23 + public List<SysMenu> selectMenuList(SysMenu menu, Long userId);
23 24
24 /** 25 /**
25 * 根据用户ID查询权限 26 * 根据用户ID查询权限
@@ -15,6 +15,7 @@ import com.ruoyi.common.utils.SecurityUtils; @@ -15,6 +15,7 @@ import com.ruoyi.common.utils.SecurityUtils;
15 import com.ruoyi.common.utils.StringUtils; 15 import com.ruoyi.common.utils.StringUtils;
16 import com.ruoyi.framework.web.domain.TreeSelect; 16 import com.ruoyi.framework.web.domain.TreeSelect;
17 import com.ruoyi.project.system.domain.SysMenu; 17 import com.ruoyi.project.system.domain.SysMenu;
  18 +import com.ruoyi.project.system.domain.SysUser;
18 import com.ruoyi.project.system.domain.vo.MetaVo; 19 import com.ruoyi.project.system.domain.vo.MetaVo;
19 import com.ruoyi.project.system.domain.vo.RouterVo; 20 import com.ruoyi.project.system.domain.vo.RouterVo;
20 import com.ruoyi.project.system.mapper.SysMenuMapper; 21 import com.ruoyi.project.system.mapper.SysMenuMapper;
@@ -44,9 +45,19 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -44,9 +45,19 @@ public class SysMenuServiceImpl implements ISysMenuService
44 * @return 菜单列表 45 * @return 菜单列表
45 */ 46 */
46 @Override 47 @Override
47 - public List<SysMenu> selectMenuList(SysMenu menu) 48 + public List<SysMenu> selectMenuList(SysMenu menu, Long userId)
48 { 49 {
49 - List<SysMenu> menuList = menuMapper.selectMenuList(menu); 50 + List<SysMenu> menuList = null;
  51 + // 管理员显示所有菜单信息
  52 + if (SysUser.isAdmin(userId))
  53 + {
  54 + menuList = menuMapper.selectMenuList(menu);
  55 + }
  56 + else
  57 + {
  58 + menu.getParams().put("userId", userId);
  59 + menuList = menuMapper.selectMenuListByUserId(menu);
  60 + }
50 return menuList; 61 return menuList;
51 } 62 }
52 63
@@ -47,6 +47,22 @@ @@ -47,6 +47,22 @@
47 from sys_menu m where m.menu_type in ('M', 'C') and m.visible = 0 47 from sys_menu m where m.menu_type in ('M', 'C') and m.visible = 0
48 order by m.parent_id, m.order_num 48 order by m.parent_id, m.order_num
49 </select> 49 </select>
  50 +
  51 + <select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
  52 + select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, ifnull(m.perms,'') as perms, m.is_frame, m.menu_type, m.icon, m.order_num, m.create_time
  53 + from sys_menu m
  54 + left join sys_role_menu rm on m.menu_id = rm.menu_id
  55 + left join sys_user_role ur on rm.role_id = ur.role_id
  56 + left join sys_role ro on ur.role_id = ro.role_id
  57 + where ur.user_id = #{params.userId}
  58 + <if test="menuName != null and menuName != ''">
  59 + AND menu_name like concat('%', #{menuName}, '%')
  60 + </if>
  61 + <if test="visible != null and visible != ''">
  62 + AND visible = #{visible}
  63 + </if>
  64 + order by m.parent_id, m.order_num
  65 + </select>
50 66
51 <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult"> 67 <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
52 select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, ifnull(m.perms,'') as perms, m.is_frame, m.menu_type, m.icon, m.order_num, m.create_time 68 select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, ifnull(m.perms,'') as perms, m.is_frame, m.menu_type, m.icon, m.order_num, m.create_time