From a454ab452d4c2b38f29dfb3d12e7db1345b96f03 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 29 Nov 2024 17:45:15 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=E5=8A=9E=E7=90=86?= =?UTF-8?q?=E4=BA=BA=E6=9D=83=E9=99=90=E5=A4=84=E7=90=86=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/WorkflowPermissionHandler.java | 67 +++++++++++++++++++ .../listener/WorkflowStartListener.java | 43 ------------ 2 files changed, 67 insertions(+), 43 deletions(-) create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java new file mode 100644 index 000000000..3ce655a4b --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java @@ -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 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(); + } + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowStartListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowStartListener.java index 7f09297cb..77506b7d5 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowStartListener.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowStartListener.java @@ -2,19 +2,11 @@ package org.dromara.workflow.listener; import lombok.RequiredArgsConstructor; 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.listener.Listener; import org.dromara.warm.flow.core.listener.ListenerVariable; -import org.dromara.common.core.enums.TaskAssigneeEnum; import org.springframework.stereotype.Component; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - /** * 流程启动监听器,用于处理流程开始时的用户信息和权限设置 *

@@ -43,43 +35,8 @@ public class WorkflowStartListener implements Listener { public void notify(ListenerVariable listenerVariable) { log.info("流程启动监听器"); FlowParams flowParams = listenerVariable.getFlowParams(); - LoginUser loginUser = LoginHelper.getLoginUser(); - // 设置当前办理人id - flowParams.handler(loginUser.getUserId().toString()); // 设置办理人所拥有的权限,比如角色、部门、用户等 - flowParams.permissionFlag(buildUserPermissions(loginUser)); log.info("流程启动监听器结束;{}", "开启流程完成"); } - /** - * 构建当前用户的所有权限列表,包括角色、岗位、用户和部门权限 - *

- * 通过合并用户的角色、岗位、用户ID和部门ID来构建用户的权限列表,格式化为字符串列表 - *

- * - * @param loginUser 当前登录的用户对象,包含用户的角色、岗位、ID等信息 - * @return 权限列表,包含角色、岗位、用户和部门的权限,格式化为字符串列表 - */ - private List 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()); - } - }