Commit 140be610032a7b92ac0a7627d10353dca81ac608

Authored by RuoYi
1 parent a5dce6cc

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

ruoyi/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java
... ... @@ -14,8 +14,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
14 14 import org.springframework.web.bind.annotation.RestController;
15 15 import com.ruoyi.common.constant.UserConstants;
16 16 import com.ruoyi.common.utils.SecurityUtils;
  17 +import com.ruoyi.common.utils.ServletUtils;
17 18 import com.ruoyi.framework.aspectj.lang.annotation.Log;
18 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 22 import com.ruoyi.framework.web.controller.BaseController;
20 23 import com.ruoyi.framework.web.domain.AjaxResult;
21 24 import com.ruoyi.project.system.domain.SysMenu;
... ... @@ -33,6 +36,9 @@ public class SysMenuController extends BaseController
33 36 @Autowired
34 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 46 @GetMapping("/list")
41 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 52 return AjaxResult.success(menuService.buildMenuTree(menus));
45 53 }
46 54  
... ... @@ -58,9 +66,11 @@ public class SysMenuController extends BaseController
58 66 * 获取菜单下拉树列表
59 67 */
60 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 74 return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
65 75 }
66 76  
... ...
ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysMenuMapper.java
... ... @@ -27,6 +27,14 @@ public interface SysMenuMapper
27 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 38 * 根据用户ID查询权限
31 39 *
32 40 * @param userId 用户ID
... ...
ruoyi/src/main/java/com/ruoyi/project/system/service/ISysMenuService.java
... ... @@ -14,12 +14,13 @@ import com.ruoyi.project.system.domain.vo.RouterVo;
14 14 public interface ISysMenuService
15 15 {
16 16 /**
17   - * 查询系统菜单列表
  17 + * 根据用户查询系统菜单列表
18 18 *
19 19 * @param menu 菜单信息
  20 + * @param userId 用户ID
20 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 26 * 根据用户ID查询权限
... ...
ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java
... ... @@ -15,6 +15,7 @@ import com.ruoyi.common.utils.SecurityUtils;
15 15 import com.ruoyi.common.utils.StringUtils;
16 16 import com.ruoyi.framework.web.domain.TreeSelect;
17 17 import com.ruoyi.project.system.domain.SysMenu;
  18 +import com.ruoyi.project.system.domain.SysUser;
18 19 import com.ruoyi.project.system.domain.vo.MetaVo;
19 20 import com.ruoyi.project.system.domain.vo.RouterVo;
20 21 import com.ruoyi.project.system.mapper.SysMenuMapper;
... ... @@ -44,9 +45,19 @@ public class SysMenuServiceImpl implements ISysMenuService
44 45 * @return 菜单列表
45 46 */
46 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 61 return menuList;
51 62 }
52 63  
... ...
ruoyi/src/main/resources/mybatis/system/SysMenuMapper.xml
... ... @@ -47,6 +47,22 @@
47 47 from sys_menu m where m.menu_type in ('M', 'C') and m.visible = 0
48 48 order by m.parent_id, m.order_num
49 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 67 <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
52 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
... ...