Selaa lähdekoodia

GLUE代码越权控制

xuxueli 6 vuotta sitten
vanhempi
commit
9329fb39e7

+ 1 - 1
doc/XXL-JOB官方文档.md Näytä tiedosto

@@ -1483,7 +1483,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1483 1483
     - 触发:单节点周期性触发,运行事件如delayqueue;
1484 1484
     - 调度:集群竞争,负载方式协同处理,竞争-加入时间轮-释放-竞争;
1485 1485
 - 2、用户管理:支持在线管理系统用户,存在管理员、普通用户两种角色;
1486
-- 3、权限管理:执行器维度进行权限控制,管理员拥有全量权限,普通用户需要分配执行器权限后才允许相关操作;([规划中]任务、日志,执行器,均限制权限;)
1486
+- 3、权限管理:执行器维度进行权限控制,管理员拥有全量权限,普通用户需要分配执行器权限后才允许相关操作;
1487 1487
 - 4、调度日志优化:支持设置日志保留天数,过期日志天维度记录报表,并清理;调度报表汇总实时数据和报表;
1488 1488
 - 5、调度线程池参数调优;
1489 1489
 - 6、升级xxl-rpc至较新版本,并清理冗余POM;

+ 11 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java Näytä tiedosto

@@ -1,10 +1,13 @@
1 1
 package com.xxl.job.admin.controller;
2 2
 
3
+import com.xxl.job.admin.core.exception.XxlJobException;
3 4
 import com.xxl.job.admin.core.model.XxlJobInfo;
4 5
 import com.xxl.job.admin.core.model.XxlJobLogGlue;
6
+import com.xxl.job.admin.core.model.XxlJobUser;
5 7
 import com.xxl.job.admin.core.util.I18nUtil;
6 8
 import com.xxl.job.admin.dao.XxlJobInfoDao;
7 9
 import com.xxl.job.admin.dao.XxlJobLogGlueDao;
10
+import com.xxl.job.admin.service.LoginService;
8 11
 import com.xxl.job.core.biz.model.ReturnT;
9 12
 import com.xxl.job.core.glue.GlueTypeEnum;
10 13
 import org.springframework.stereotype.Controller;
@@ -13,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
13 16
 import org.springframework.web.bind.annotation.ResponseBody;
14 17
 
15 18
 import javax.annotation.Resource;
19
+import javax.servlet.http.HttpServletRequest;
16 20
 import java.util.Date;
17 21
 import java.util.List;
18 22
 
@@ -30,7 +34,7 @@ public class JobCodeController {
30 34
 	private XxlJobLogGlueDao xxlJobLogGlueDao;
31 35
 
32 36
 	@RequestMapping
33
-	public String index(Model model, int jobId) {
37
+	public String index(HttpServletRequest request, Model model, int jobId) {
34 38
 		XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
35 39
 		List<XxlJobLogGlue> jobLogGlues = xxlJobLogGlueDao.findByJobId(jobId);
36 40
 
@@ -41,6 +45,12 @@ public class JobCodeController {
41 45
 			throw new RuntimeException(I18nUtil.getString("jobinfo_glue_gluetype_unvalid"));
42 46
 		}
43 47
 
48
+		// valid permission
49
+		XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
50
+		if (!loginUser.validPermission(jobInfo.getJobGroup())) {
51
+			throw new XxlJobException(I18nUtil.getString("system_permission_limit"));
52
+		}
53
+
44 54
 		// Glue类型-字典
45 55
 		model.addAttribute("GlueTypeEnum", GlueTypeEnum.values());
46 56
 

+ 13 - 9
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java Näytä tiedosto

@@ -16,7 +16,6 @@ import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
16 16
 import com.xxl.job.core.glue.GlueTypeEnum;
17 17
 import org.springframework.stereotype.Controller;
18 18
 import org.springframework.ui.Model;
19
-import org.springframework.util.StringUtils;
20 19
 import org.springframework.web.bind.annotation.RequestMapping;
21 20
 import org.springframework.web.bind.annotation.RequestParam;
22 21
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -53,6 +52,18 @@ public class JobInfoController {
53 52
 		List<XxlJobGroup> jobGroupList_all =  xxlJobGroupDao.findAll();
54 53
 
55 54
 		// filter group
55
+		List<XxlJobGroup> jobGroupList = filterJobGroupByRole(request, jobGroupList_all);
56
+		if (jobGroupList==null || jobGroupList.size()==0) {
57
+			throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
58
+		}
59
+
60
+		model.addAttribute("JobGroupList", jobGroupList);
61
+		model.addAttribute("jobGroup", jobGroup);
62
+
63
+		return "jobinfo/jobinfo.index";
64
+	}
65
+
66
+	public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all){
56 67
 		List<XxlJobGroup> jobGroupList = new ArrayList<>();
57 68
 		if (jobGroupList_all!=null && jobGroupList_all.size()>0) {
58 69
 			XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
@@ -70,14 +81,7 @@ public class JobInfoController {
70 81
 				}
71 82
 			}
72 83
 		}
73
-		if (jobGroupList==null || jobGroupList.size()==0) {
74
-			throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
75
-		}
76
-
77
-		model.addAttribute("JobGroupList", jobGroupList);
78
-		model.addAttribute("jobGroup", jobGroup);
79
-
80
-		return "jobinfo/jobinfo.index";
84
+		return jobGroupList;
81 85
 	}
82 86
 	
83 87
 	@RequestMapping("/pageList")

+ 5 - 21
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java Näytä tiedosto

@@ -4,13 +4,11 @@ import com.xxl.job.admin.core.exception.XxlJobException;
4 4
 import com.xxl.job.admin.core.model.XxlJobGroup;
5 5
 import com.xxl.job.admin.core.model.XxlJobInfo;
6 6
 import com.xxl.job.admin.core.model.XxlJobLog;
7
-import com.xxl.job.admin.core.model.XxlJobUser;
8 7
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
9 8
 import com.xxl.job.admin.core.util.I18nUtil;
10 9
 import com.xxl.job.admin.dao.XxlJobGroupDao;
11 10
 import com.xxl.job.admin.dao.XxlJobInfoDao;
12 11
 import com.xxl.job.admin.dao.XxlJobLogDao;
13
-import com.xxl.job.admin.service.LoginService;
14 12
 import com.xxl.job.core.biz.ExecutorBiz;
15 13
 import com.xxl.job.core.biz.model.LogResult;
16 14
 import com.xxl.job.core.biz.model.ReturnT;
@@ -25,8 +23,10 @@ import org.springframework.web.bind.annotation.ResponseBody;
25 23
 
26 24
 import javax.annotation.Resource;
27 25
 import javax.servlet.http.HttpServletRequest;
28
-import java.text.ParseException;
29
-import java.util.*;
26
+import java.util.Date;
27
+import java.util.HashMap;
28
+import java.util.List;
29
+import java.util.Map;
30 30
 
31 31
 /**
32 32
  * index controller
@@ -51,23 +51,7 @@ public class JobLogController {
51 51
 		List<XxlJobGroup> jobGroupList_all =  xxlJobGroupDao.findAll();
52 52
 
53 53
 		// filter group
54
-		List<XxlJobGroup> jobGroupList = new ArrayList<>();
55
-		if (jobGroupList_all!=null && jobGroupList_all.size()>0) {
56
-			XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
57
-			if (loginUser.getRole() == 1) {
58
-				jobGroupList = jobGroupList_all;
59
-			} else {
60
-				List<String> groupIdStrs = new ArrayList<>();
61
-				if (loginUser.getPermission()!=null && loginUser.getPermission().trim().length()>0) {
62
-					groupIdStrs = Arrays.asList(loginUser.getPermission().trim().split(","));
63
-				}
64
-				for (XxlJobGroup groupItem:jobGroupList_all) {
65
-					if (groupIdStrs.contains(String.valueOf(groupItem.getId()))) {
66
-						jobGroupList.add(groupItem);
67
-					}
68
-				}
69
-			}
70
-		}
54
+		List<XxlJobGroup> jobGroupList = JobInfoController.filterJobGroupByRole(request, jobGroupList_all);
71 55
 		if (jobGroupList==null || jobGroupList.size()==0) {
72 56
 			throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
73 57
 		}

+ 19 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java Näytä tiedosto

@@ -1,5 +1,7 @@
1 1
 package com.xxl.job.admin.core.model;
2 2
 
3
+import org.springframework.util.StringUtils;
4
+
3 5
 /**
4 6
  * @author xuxueli 2019-05-04 16:43:12
5 7
  */
@@ -51,4 +53,21 @@ public class XxlJobUser {
51 53
 		this.permission = permission;
52 54
 	}
53 55
 
56
+	// plugin
57
+	public boolean validPermission(int jobGroup){
58
+		if (this.role == 1) {
59
+			return true;
60
+		} else {
61
+			if (StringUtils.hasText(this.permission)) {
62
+				for (String permissionItem : this.permission.split(",")) {
63
+					if (String.valueOf(jobGroup).equals(permissionItem)) {
64
+						return true;
65
+					}
66
+				}
67
+			}
68
+			return false;
69
+		}
70
+
71
+	}
72
+
54 73
 }