Commit 3f2daf47 authored by chenhao's avatar chenhao

修改工作流执行权限校验的方法

parent b16a9093
...@@ -2,6 +2,8 @@ package com.yeejoin.amos.boot.biz.common.service; ...@@ -2,6 +2,8 @@ package com.yeejoin.amos.boot.biz.common.service;
import java.util.Map; import java.util.Map;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
public interface IWorkflowExcuteService{ public interface IWorkflowExcuteService{
/** /**
...@@ -16,14 +18,14 @@ public interface IWorkflowExcuteService{ ...@@ -16,14 +18,14 @@ public interface IWorkflowExcuteService{
* @param processInstanceId 流程定义的ID * @param processInstanceId 流程定义的ID
* @return true 可以执行,false 无执行权限 * @return true 可以执行,false 无执行权限
*/ */
boolean checkTaskAuth(String processInstanceId); boolean checkTaskAuth(String processInstanceId, ReginParams userInfo);
/** /**
* 检查当前登录人有没有流程操作权限 * 检查当前登录人有没有流程操作权限
* @param processInstanceId 流程定义的ID * @param processInstanceId 流程定义的ID
* @return 包含是否执行的角色权限flag,以及当前任务的id * @return 包含是否执行的角色权限flag,以及当前任务的id
*/ */
Map<String, Object> checkTaskAuthMap(String processInstanceId); Map<String, Object> checkTaskAuthMap(String processInstanceId, ReginParams userInfo);
/** /**
* 设置当前任务的执行人,只支持当前节点流程拥有单个可执行任务的情况,不支持并行网关产生的多条任务设置人的任务情况 * 设置当前任务的执行人,只支持当前节点流程拥有单个可执行任务的情况,不支持并行网关产生的多条任务设置人的任务情况
* @param processInstanceId * @param processInstanceId
...@@ -37,7 +39,7 @@ public interface IWorkflowExcuteService{ ...@@ -37,7 +39,7 @@ public interface IWorkflowExcuteService{
* @param userInfo * @param userInfo
* @return * @return
*/ */
boolean CompleteTask(String processInstanceId,String condition); boolean CompleteTask(String processInstanceId,String condition, ReginParams userInfo);
} }
...@@ -7,15 +7,19 @@ import java.util.Map; ...@@ -7,15 +7,19 @@ import java.util.Map;
import java.util.Random; import java.util.Random;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.service.IWorkflowExcuteService; import com.yeejoin.amos.boot.biz.common.service.IWorkflowExcuteService;
import com.yeejoin.amos.boot.biz.common.workflow.feign.WorkflowFeignService; import com.yeejoin.amos.boot.biz.common.workflow.feign.WorkflowFeignService;
import ch.qos.logback.core.joran.conditional.IfAction;
@Service @Service
public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService { public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
...@@ -43,49 +47,60 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService { ...@@ -43,49 +47,60 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
} }
@Override @Override
public boolean checkTaskAuth(String processInstanceId) { public boolean checkTaskAuth(String processInstanceId, ReginParams userInfo) {
Map<String, Object> map = checkTaskAuthMap(processInstanceId); Map<String, Object> map = checkTaskAuthMap(processInstanceId, userInfo);
return Boolean.parseBoolean(map.get("checkFlag").toString()); return Boolean.parseBoolean(map.get("checkFlag").toString());
} }
@Override @Override
public Map<String, Object> checkTaskAuthMap(String processInstanceId) { public Map<String, Object> checkTaskAuthMap(String processInstanceId, ReginParams userInfo) {
// 获取当前登录用户的角色 // 获取当前登录用户的角色
String currentLoginUserRole = userInfo.getRole().getRoleName();
String currentLoginUserId = userInfo.getUserModel().getUserId();
Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> map = new HashMap<String, Object>();
map.put("checkFlag", false); map.put("checkFlag", false);
JSONObject teskObject = workflowFeignService.getTask(processInstanceId); JSONObject teskObject = workflowFeignService.getTaskList(processInstanceId);
if (ObjectUtils.isNotEmpty(teskObject.getJSONObject("data"))) { if (ObjectUtils.isNotEmpty(teskObject)) {
map.put("taskId", teskObject.getJSONObject("data").getString("id")); JSONArray taskDetailArray = teskObject.getJSONArray("data");
map.put("checkFlag", true); for (Object obj : taskDetailArray) {
map.put("name", teskObject.getJSONObject("data").getString("name")); JSONObject detail = JSONObject.parseObject(JSONObject.toJSONString(obj));
if ("制定计划+内容".equals(detail.getString("name")) || "现场确认".equals(detail.getString("name")) ) {
map.put("taskId", detail.getString("id"));
map.put("checkFlag", true);
map.put("name", detail.getString("name"));
return map;
}
JSONObject taskGroupNameObject = workflowFeignService.getTaskGroupName(detail.getString("id"));
// 获取流程中原本设置的当前节点的执行权限
JSONArray taskGroupNameDetail = taskGroupNameObject.getJSONArray("data");
// 如果拿不到当前任务的执行角色,再去获取当前任务有没有默认的执行人,如果都没有则返回校验失败
if (ObjectUtils.isEmpty(taskGroupNameDetail)) {
JSONObject taskAssignObject = workflowFeignService.getTaskAssign(detail.getString("id"));
String assignUser = taskAssignObject.getJSONObject("data").getString("assignee");
if (StringUtils.isNotBlank(assignUser)) {
// 如果当前登录人与当前任务的设定人不一定,则直接返回权限校验失败
if (!currentLoginUserId.equals(assignUser)) {
return map;
}
map.put("taskId", detail.getString("id"));
map.put("checkFlag", true);
map.put("name", detail.getString("name"));
map.put("assign", assignUser);
return map;
}
continue;
}
String defaultExecutionRoleProcess = taskGroupNameDetail.getJSONObject(0).getString("groupId");
// 判断当前登录人的角色是不是与流程中设置的当前任务节点权限一致,一致则执行,不一致则退出
if (!defaultExecutionRoleProcess.equals(currentLoginUserRole)) {
continue;
}
map.put("taskId", detail.getString("id"));
map.put("checkFlag", true);
map.put("name", detail.getString("name"));
map.put("groupName", currentLoginUserRole);
}
} }
/*
* JSONObject teskObject = workflowFeignService.getTaskList(processInstanceId);
* if (ObjectUtils.isNotEmpty(teskObject)) { JSONArray taskDetailArray =
* teskObject.getJSONArray("data"); for (Object obj : taskDetailArray) {
* JSONObject detail = JSONObject.parseObject(JSONObject.toJSONString(obj));
* JSONObject taskGroupNameObject =
* workflowFeignService.getTaskGroupName(detail.getString("id")); //
* 获取流程中原本设置的当前节点的执行权限 JSONArray taskGroupNameDetail =
* taskGroupNameObject.getJSONArray("data"); //
* 如果拿不到当前任务的执行角色,再去获取当前任务有没有默认的执行人,如果都没有则返回校验失败 if
* (ObjectUtils.isEmpty(taskGroupNameDetail)) { JSONObject taskAssignObject =
* workflowFeignService.getTaskAssign(detail.getString("id")); String assignUser
* = taskAssignObject.getJSONObject("data").getString("assignee"); if
* (StringUtils.isNotBlank(assignUser)) { // 如果当前登录人与当前任务的设定人不一定,则直接返回权限校验失败 if
* (!currentLoginUserId.equals(assignUser)) { return map; } else {
* map.put("taskId", detail.getString("id")); map.put("checkFlag", true);
* map.put("name", detail.getString("name")); map.put("assign", assignUser);
* return map; } } continue; } String defaultExecutionRoleProcess =
* taskGroupNameDetail.getJSONObject(0).getString("groupId"); //
* 判断当前登录人的角色是不是与流程中设置的当前任务节点权限一致,一致则执行,不一致则退出 if
* (!defaultExecutionRoleProcess.equals(currentLoginUserRole)) { continue; }
* map.put("taskId", detail.getString("id")); map.put("checkFlag", true);
* map.put("name", detail.getString("name"));
* map.put("groupName",currentLoginUserRole); } }
*/
return map; return map;
} }
...@@ -126,8 +141,8 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService { ...@@ -126,8 +141,8 @@ public class WorkflowExcuteServiceImpl implements IWorkflowExcuteService {
} }
@Override @Override
public boolean CompleteTask(String processInstanceId, String condition) { public boolean CompleteTask(String processInstanceId, String condition, ReginParams userInfo) {
Map<String, Object> map = checkTaskAuthMap(processInstanceId); Map<String, Object> map = checkTaskAuthMap(processInstanceId, userInfo);
if (Boolean.parseBoolean(map.get("checkFlag").toString())) { if (Boolean.parseBoolean(map.get("checkFlag").toString())) {
HashMap<String, Object> conditionMap = new HashMap<String, Object>(); HashMap<String, Object> conditionMap = new HashMap<String, Object>();
conditionMap.put("condition", condition); conditionMap.put("condition", condition);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment