add 新增办理人权限处理器
This commit is contained in:
parent
8986f9a9b3
commit
a454ab452d
@ -0,0 +1,67 @@
|
|||||||
|
package org.dromara.workflow.handler;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
|
import org.dromara.common.core.enums.TaskAssigneeEnum;
|
||||||
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
|
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||||
|
import org.dromara.warm.flow.core.handler.PermissionHandler;
|
||||||
|
import org.dromara.warm.flow.core.service.impl.TaskServiceImpl;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办理人权限处理器
|
||||||
|
*
|
||||||
|
* @author AprilWind
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class WorkflowPermissionHandler implements PermissionHandler {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批前获取当前办理人,办理时会校验的该权限集合
|
||||||
|
* 后续在{@link TaskServiceImpl#checkAuth(Task, FlowParams)} 中调用
|
||||||
|
* 返回当前用户权限集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<String> permissions() {
|
||||||
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
|
// 使用一个流来构建权限列表
|
||||||
|
return Stream.of(
|
||||||
|
// 角色权限前缀
|
||||||
|
loginUser.getRoles().stream()
|
||||||
|
.map(role -> TaskAssigneeEnum.ROLE.getCode() + role.getRoleId()),
|
||||||
|
|
||||||
|
// 岗位权限前缀
|
||||||
|
Stream.ofNullable(loginUser.getPosts())
|
||||||
|
.flatMap(Collection::stream)
|
||||||
|
.map(post -> TaskAssigneeEnum.POST.getCode() + post.getPostId()),
|
||||||
|
|
||||||
|
// 用户和部门权限
|
||||||
|
Stream.of(
|
||||||
|
TaskAssigneeEnum.USER.getCode() + loginUser.getUserId(),
|
||||||
|
TaskAssigneeEnum.DEPT.getCode() + loginUser.getDeptId()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.flatMap(stream -> stream)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前办理人
|
||||||
|
*
|
||||||
|
* @return 当前办理人
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getHandler() {
|
||||||
|
return LoginHelper.getUserIdStr();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -2,19 +2,11 @@ package org.dromara.workflow.listener;
|
|||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
|
||||||
import org.dromara.warm.flow.core.dto.FlowParams;
|
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||||
import org.dromara.warm.flow.core.listener.Listener;
|
import org.dromara.warm.flow.core.listener.Listener;
|
||||||
import org.dromara.warm.flow.core.listener.ListenerVariable;
|
import org.dromara.warm.flow.core.listener.ListenerVariable;
|
||||||
import org.dromara.common.core.enums.TaskAssigneeEnum;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程启动监听器,用于处理流程开始时的用户信息和权限设置
|
* 流程启动监听器,用于处理流程开始时的用户信息和权限设置
|
||||||
* <p>
|
* <p>
|
||||||
@ -43,43 +35,8 @@ public class WorkflowStartListener implements Listener {
|
|||||||
public void notify(ListenerVariable listenerVariable) {
|
public void notify(ListenerVariable listenerVariable) {
|
||||||
log.info("流程启动监听器");
|
log.info("流程启动监听器");
|
||||||
FlowParams flowParams = listenerVariable.getFlowParams();
|
FlowParams flowParams = listenerVariable.getFlowParams();
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
|
||||||
// 设置当前办理人id
|
|
||||||
flowParams.handler(loginUser.getUserId().toString());
|
|
||||||
// 设置办理人所拥有的权限,比如角色、部门、用户等
|
// 设置办理人所拥有的权限,比如角色、部门、用户等
|
||||||
flowParams.permissionFlag(buildUserPermissions(loginUser));
|
|
||||||
log.info("流程启动监听器结束;{}", "开启流程完成");
|
log.info("流程启动监听器结束;{}", "开启流程完成");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建当前用户的所有权限列表,包括角色、岗位、用户和部门权限
|
|
||||||
* <p>
|
|
||||||
* 通过合并用户的角色、岗位、用户ID和部门ID来构建用户的权限列表,格式化为字符串列表
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param loginUser 当前登录的用户对象,包含用户的角色、岗位、ID等信息
|
|
||||||
* @return 权限列表,包含角色、岗位、用户和部门的权限,格式化为字符串列表
|
|
||||||
*/
|
|
||||||
private List<String> buildUserPermissions(LoginUser loginUser) {
|
|
||||||
// 使用一个流来构建权限列表
|
|
||||||
return Stream.of(
|
|
||||||
// 角色权限前缀
|
|
||||||
loginUser.getRoles().stream()
|
|
||||||
.map(role -> TaskAssigneeEnum.ROLE.getCode() + role.getRoleId()),
|
|
||||||
|
|
||||||
// 岗位权限前缀
|
|
||||||
Stream.ofNullable(loginUser.getPosts())
|
|
||||||
.flatMap(Collection::stream)
|
|
||||||
.map(post -> TaskAssigneeEnum.POST.getCode() + post.getPostId()),
|
|
||||||
|
|
||||||
// 用户和部门权限
|
|
||||||
Stream.of(
|
|
||||||
TaskAssigneeEnum.USER.getCode() + loginUser.getUserId(),
|
|
||||||
TaskAssigneeEnum.DEPT.getCode() + loginUser.getDeptId()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.flatMap(stream -> stream)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user