From f1208474f771a1c233d7425c8ed13fbaa0d521ac Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期三, 12 三月 2025 09:35:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/5.X' into 5.X

---
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java |   73 ++++++++++++++++++++++++++++++++++++
 1 files changed, 73 insertions(+), 0 deletions(-)

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 0000000..c18e4ed
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java
@@ -0,0 +1,73 @@
+package org.dromara.workflow.handler;
+
+import cn.hutool.core.util.ObjectUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.domain.model.LoginUser;
+import org.dromara.workflow.common.ConditionalOnEnable;
+import org.dromara.workflow.common.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.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * 鍔炵悊浜烘潈闄愬鐞嗗櫒
+ *
+ * @author AprilWind
+ */
+@ConditionalOnEnable
+@RequiredArgsConstructor
+@Component
+@Slf4j
+public class WorkflowPermissionHandler implements PermissionHandler {
+
+    /**
+     * 瀹℃壒鍓嶈幏鍙栧綋鍓嶅姙鐞嗕汉锛屽姙鐞嗘椂浼氭牎楠岀殑璇ユ潈闄愰泦鍚�
+     * 鍚庣画鍦▄@link TaskServiceImpl#checkAuth(Task, FlowParams)} 涓皟鐢�
+     * 杩斿洖褰撳墠鐢ㄦ埛鏉冮檺闆嗗悎
+     */
+    @Override
+    public List<String> permissions() {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        if (ObjectUtil.isNull(loginUser)) {
+            return new ArrayList<>();
+        }
+        // 浣跨敤涓�涓祦鏉ユ瀯寤烘潈闄愬垪琛�
+        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(String.valueOf(loginUser.getUserId()),
+                    TaskAssigneeEnum.DEPT.getCode() + loginUser.getDeptId()
+                )
+            )
+            .flatMap(stream -> stream)
+            .collect(Collectors.toList());
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鍔炵悊浜�
+     *
+     * @return 褰撳墠鍔炵悊浜�
+     */
+    @Override
+    public String getHandler() {
+        return LoginHelper.getUserIdStr();
+    }
+
+}

--
Gitblit v1.9.3