Skip to content

Commit f808160

Browse files
committed
fix: 菜单权限显示bug
1 parent e6469dd commit f808160

7 files changed

Lines changed: 101 additions & 53 deletions

File tree

ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ public String menu() {
4949
@GetMapping("/list")
5050
@ResponseBody
5151
public List<SysMenu> list(SysMenu menu) {
52-
return menuService.selectMenuList(menu);
52+
Long userId = ShiroUtils.getUserId();
53+
return menuService.selectMenuList(menu, userId);
5354
}
5455

5556
/**
@@ -145,7 +146,8 @@ public String checkMenuNameUnique(SysMenu menu) {
145146
@GetMapping("/roleMenuTreeData")
146147
@ResponseBody
147148
public List<Ztree> roleMenuTreeData(SysRole role) {
148-
return menuService.roleMenuTreeData(role);
149+
Long userId = ShiroUtils.getUserId();
150+
return menuService.roleMenuTreeData(role, userId);
149151
}
150152

151153
/**
@@ -154,7 +156,8 @@ public List<Ztree> roleMenuTreeData(SysRole role) {
154156
@GetMapping("/menuTreeData")
155157
@ResponseBody
156158
public List<Ztree> menuTreeData(SysRole role) {
157-
return menuService.menuTreeData();
159+
Long userId = ShiroUtils.getUserId();
160+
return menuService.menuTreeData(userId);
158161
}
159162

160163
/**

ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
import com.ruoyi.quartz.service.ISysJobService;
99
import com.ruoyi.quartz.util.CronUtils;
1010
import com.ruoyi.quartz.util.ScheduleUtils;
11-
import org.quartz.CronTrigger;
12-
import org.quartz.ObjectAlreadyExistsException;
1311
import org.quartz.Scheduler;
1412
import org.quartz.SchedulerException;
1513
import org.springframework.beans.factory.annotation.Autowired;
@@ -46,18 +44,7 @@ public SysJobServiceImpl(Scheduler scheduler, SysJobMapper jobMapper) {
4644
public void init() throws SchedulerException, TaskException {
4745
List<SysJob> jobList = jobMapper.selectJobAll();
4846
for (SysJob sysJob : jobList){
49-
CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, sysJob.getJobId());
50-
// 如果不存在,则创建
51-
if (cronTrigger == null) {
52-
try {
53-
createScheduleJob(scheduler, sysJob);
54-
}catch (ObjectAlreadyExistsException e){
55-
updateScheduleJob(scheduler, sysJob);
56-
}
57-
58-
} else {
59-
updateScheduleJob(scheduler, sysJob);
60-
}
47+
ScheduleUtils.updateScheduleJob(scheduler, sysJob);
6148
}
6249
}
6350

ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ private static Class<? extends Job> getQuartzJobClass(SysJob sysJob) {
3333
/**
3434
* 获取触发器key
3535
*/
36-
public static TriggerKey getTriggerKey(Long jobId) {
36+
private static TriggerKey getTriggerKey(Long jobId) {
3737
return TriggerKey.triggerKey(ScheduleConstants.TASK_CLASS_NAME + jobId);
3838
}
3939

4040
/**
4141
* 获取jobKey
4242
*/
43-
public static JobKey getJobKey(Long jobId) {
43+
private static JobKey getJobKey(Long jobId) {
4444
return JobKey.jobKey(ScheduleConstants.TASK_CLASS_NAME + jobId);
4545
}
4646

@@ -74,7 +74,11 @@ public static void createScheduleJob(Scheduler scheduler, SysJob job) throws Sch
7474

7575
// 放入参数,运行时的方法可以获取
7676
jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job);
77-
77+
// 判断是否存在
78+
if (scheduler.checkExists(getJobKey(job.getJobId()))){
79+
// 防止创建时存在数据问题 先移除,然后在执行创建操作
80+
scheduler.deleteJob(getJobKey(job.getJobId()));
81+
}
7882
scheduler.scheduleJob(jobDetail, trigger);
7983

8084
// 暂停任务
@@ -87,18 +91,7 @@ public static void createScheduleJob(Scheduler scheduler, SysJob job) throws Sch
8791
* 更新定时任务
8892
*/
8993
public static void updateScheduleJob(Scheduler scheduler, SysJob job) throws SchedulerException, TaskException {
90-
JobKey jobKey = getJobKey(job.getJobId());
91-
92-
// 判断是否存在
93-
if (scheduler.checkExists(jobKey)) {
94-
// 先移除,然后做更新操作
95-
scheduler.deleteJob(jobKey);
96-
}
9794
createScheduleJob(scheduler, job);
98-
// 暂停任务
99-
if (job.getStatus().equals(ScheduleConstants.Status.PAUSE.getValue())) {
100-
pauseJob(scheduler, job.getJobId());
101-
}
10295
}
10396

10497
/**

ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.ruoyi.system.mapper;
22

3-
import java.util.List;
4-
5-
import org.apache.ibatis.annotations.Param;
63
import com.ruoyi.system.domain.SysMenu;
4+
import org.apache.ibatis.annotations.Param;
5+
6+
import java.util.List;
77

88
/**
99
* 菜单表 数据层
@@ -18,6 +18,14 @@ public interface SysMenuMapper {
1818
*/
1919
List<SysMenu> selectMenuAll();
2020

21+
/**
22+
* 根据用户ID查询菜单
23+
*
24+
* @param userId 用户ID
25+
* @return 菜单列表
26+
*/
27+
List<SysMenu> selectMenuAllByUserId(Long userId);
28+
2129
/**
2230
* 查询系统正常显示菜单(不含按钮)
2331
*
@@ -57,6 +65,14 @@ public interface SysMenuMapper {
5765
*/
5866
List<SysMenu> selectMenuList(SysMenu menu);
5967

68+
/**
69+
* 查询系统菜单列表
70+
*
71+
* @param menu 菜单信息
72+
* @return 菜单列表
73+
*/
74+
List<SysMenu> selectMenuListByUserId(SysMenu menu);
75+
6076
/**
6177
* 删除菜单管理信息
6278
*

ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,18 @@ public interface ISysMenuService {
2727
* 查询系统菜单列表
2828
*
2929
* @param menu 菜单信息
30+
* @param userId 用户ID
3031
* @return 菜单列表
3132
*/
32-
List<SysMenu> selectMenuList(SysMenu menu);
33+
List<SysMenu> selectMenuList(SysMenu menu, Long userId);
3334

3435
/**
3536
* 查询菜单集合
3637
*
38+
* @param userId 用户ID
3739
* @return 所有菜单信息
3840
*/
39-
List<SysMenu> selectMenuAll();
41+
List<SysMenu> selectMenuAll(Long userId);
4042

4143
/**
4244
* 根据用户ID查询权限
@@ -50,23 +52,26 @@ public interface ISysMenuService {
5052
* 根据角色ID查询菜单
5153
*
5254
* @param role 角色对象
55+
* @param userId 用户ID
5356
* @return 菜单列表
5457
*/
55-
List<Ztree> roleMenuTreeData(SysRole role);
58+
List<Ztree> roleMenuTreeData(SysRole role, Long userId);
5659

5760
/**
5861
* 查询所有菜单信息
5962
*
63+
* @param userId 用户ID
6064
* @return 菜单列表
6165
*/
62-
List<Ztree> menuTreeData();
66+
List<Ztree> menuTreeData(Long userId);
6367

6468
/**
6569
* 查询系统所有权限
6670
*
71+
* @param userId 用户ID
6772
* @return 权限列表
6873
*/
69-
Map<String, String> selectPermsAll();
74+
Map<String, String> selectPermsAll(Long userId);
7075

7176
/**
7277
* 删除菜单管理信息

ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.ruoyi.system.service.impl;
22

33
import cn.hutool.core.collection.CollectionUtil;
4+
import cn.hutool.core.util.ObjectUtil;
45
import cn.hutool.core.util.StrUtil;
56
import com.ruoyi.common.base.Ztree;
67
import com.ruoyi.common.constant.UserConstants;
@@ -10,7 +11,6 @@
1011
import com.ruoyi.system.mapper.SysMenuMapper;
1112
import com.ruoyi.system.mapper.SysRoleMenuMapper;
1213
import com.ruoyi.system.service.ISysMenuService;
13-
import org.apache.commons.lang3.ObjectUtils;
1414
import org.springframework.beans.factory.annotation.Autowired;
1515
import org.springframework.stereotype.Service;
1616
import org.springframework.util.CollectionUtils;
@@ -59,21 +59,36 @@ public List<SysMenu> selectMenusByUser(SysUser user) {
5959
/**
6060
* 查询菜单集合
6161
*
62+
* @param userId 用户ID
6263
* @return 所有菜单信息
6364
*/
6465
@Override
65-
public List<SysMenu> selectMenuList(SysMenu menu) {
66-
return menuMapper.selectMenuList(menu);
66+
public List<SysMenu> selectMenuList(SysMenu menu, Long userId) {
67+
List<SysMenu> menuList;
68+
if (SysUser.isAdmin(userId)){
69+
menuList = menuMapper.selectMenuList(menu);
70+
}else{
71+
menu.getParams().put("userId", userId);
72+
menuList = menuMapper.selectMenuListByUserId(menu);
73+
}
74+
return menuList;
6775
}
6876

6977
/**
7078
* 查询菜单集合
7179
*
80+
* @param userId 用户ID
7281
* @return 所有菜单信息
7382
*/
7483
@Override
75-
public List<SysMenu> selectMenuAll() {
76-
return menuMapper.selectMenuAll();
84+
public List<SysMenu> selectMenuAll(Long userId) {
85+
List<SysMenu> menuList;
86+
if (SysUser.isAdmin(userId)){
87+
menuList = menuMapper.selectMenuAll();
88+
}else{
89+
menuList = menuMapper.selectMenuAllByUserId(userId);
90+
}
91+
return menuList;
7792
}
7893

7994
/**
@@ -94,14 +109,15 @@ public Set<String> selectPermsByUserId(Long userId) {
94109
* 根据角色ID查询菜单
95110
*
96111
* @param role 角色对象
112+
* @param userId 用户ID
97113
* @return 菜单列表
98114
*/
99115
@Override
100-
public List<Ztree> roleMenuTreeData(SysRole role) {
116+
public List<Ztree> roleMenuTreeData(SysRole role, Long userId) {
101117
Long roleId = role.getRoleId();
102118
List<Ztree> ztrees;
103-
List<SysMenu> menuList = menuMapper.selectMenuAll();
104-
if (ObjectUtils.allNotNull(roleId)) {
119+
List<SysMenu> menuList = selectMenuAll(userId);
120+
if (ObjectUtil.isNotNull(roleId)) {
105121
List<String> roleMenuList = menuMapper.selectMenuTree(roleId);
106122
ztrees = initZtree(menuList, roleMenuList, true);
107123
} else {
@@ -113,11 +129,12 @@ public List<Ztree> roleMenuTreeData(SysRole role) {
113129
/**
114130
* 查询所有菜单
115131
*
132+
* @param userId 用户ID
116133
* @return 菜单列表
117134
*/
118135
@Override
119-
public List<Ztree> menuTreeData() {
120-
List<SysMenu> menuList = menuMapper.selectMenuAll();
136+
public List<Ztree> menuTreeData(Long userId) {
137+
List<SysMenu> menuList = selectMenuAll(userId);
121138
return initZtree(menuList);
122139
}
123140

@@ -127,20 +144,21 @@ public List<Ztree> menuTreeData() {
127144
* @param menuList 菜单列表
128145
* @return 树结构列表
129146
*/
130-
public List<Ztree> initZtree(List<SysMenu> menuList)
147+
private List<Ztree> initZtree(List<SysMenu> menuList)
131148
{
132149
return initZtree(menuList, null, false);
133150
}
134151

135152
/**
136153
* 查询系统所有权限
137154
*
155+
* @param userId 用户ID
138156
* @return 权限列表
139157
*/
140158
@Override
141-
public Map<String, String> selectPermsAll() {
159+
public Map<String, String> selectPermsAll(Long userId) {
142160
LinkedHashMap<String, String> section = new LinkedHashMap<>();
143-
List<SysMenu> permissions = menuMapper.selectMenuAll();
161+
List<SysMenu> permissions = selectMenuAll(userId);
144162
if (!CollectionUtils.isEmpty(permissions)) {
145163
permissions.forEach(menu -> section.put(menu.getUrl(), MessageFormat.format(PREMISSION_STRING, menu.getPerms())));
146164
}
@@ -258,7 +276,7 @@ public int updateMenu(SysMenu menu) {
258276
@Override
259277
public String checkMenuNameUnique(SysMenu menu) {
260278
SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
261-
if (ObjectUtils.allNotNull(info) && !info.getMenuId().equals(menu.getMenuId())) {
279+
if (ObjectUtil.isNotNull(info) && !info.getMenuId().equals(menu.getMenuId())) {
262280
return UserConstants.MENU_NAME_NOT_UNIQUE;
263281
}
264282
return UserConstants.MENU_NAME_UNIQUE;

ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,16 @@
5050
order by parent_id, order_num
5151
</select>
5252

53+
<select id="selectMenuAllByUserId" parameterType="Long" resultMap="SysMenuResult">
54+
select distinct m.menu_id, m.parent_id, m.menu_name, m.url, m.perms, m.target, m.menu_type, m.icon, m.order_num, m.create_time
55+
from sys_menu m
56+
left join sys_role_menu rm on m.menu_id = rm.menu_id
57+
left join sys_user_role ur on rm.role_id = ur.role_id
58+
LEFT JOIN sys_role ro on ur.role_id = ro.role_id
59+
where ur.user_id = #{userId}
60+
order by m.parent_id, m.order_num
61+
</select>
62+
5363
<select id="selectPermsByUserId" parameterType="Long" resultType="String">
5464
select distinct m.perms
5565
from sys_menu m
@@ -79,6 +89,22 @@
7989
order by parent_id, order_num
8090
</select>
8191

92+
<select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
93+
select distinct m.menu_id, m.parent_id, m.menu_name, m.url, m.perms, m.target, m.menu_type, m.icon, m.order_num, m.create_time
94+
from sys_menu m
95+
left join sys_role_menu rm on m.menu_id = rm.menu_id
96+
left join sys_user_role ur on rm.role_id = ur.role_id
97+
LEFT JOIN sys_role ro on ur.role_id = ro.role_id
98+
where ur.user_id = #{params.userId}
99+
<if test="menuName != null and menuName != ''">
100+
AND m.menu_name like concat('%', #{menuName}, '%')
101+
</if>
102+
<if test="visible != null and visible != ''">
103+
AND m.visible = #{visible}
104+
</if>
105+
order by m.parent_id, m.order_num
106+
</select>
107+
82108
<delete id="deleteMenuById" parameterType="Long">
83109
delete from sys_menu where menu_id = #{menuId} or parent_id = #{menuId}
84110
</delete>

0 commit comments

Comments
 (0)