Quellcode durchsuchen

fix: 判断step isCanHandle时未考虑同部门

xf vor 10 Monaten
Ursprung
Commit
1fc76531d7

+ 2 - 2
src/Hotline/FlowEngine/Workflows/Workflow.cs

@@ -719,13 +719,13 @@ public partial class Workflow
     /// 当前用户是否可以办理该流程
     /// </summary>
     /// <returns></returns>
-    public bool CanHandle(string userId, string orgId, string[] roleIds)
+    public bool IsCanHandle(string userId, string orgId, string[] roleIds)
     {
         if (!Steps.Any())
             throw new UserFriendlyException("未查询节点信息");
         return Status is EWorkflowStatus.Runnable &&
                //(HandlerUsers.Any(d => d.Key == userId) || HandlerOrgs.Any(d => d.Key == orgCode));
-               Steps.Any(d => d.HandlerId == userId || d.HandlerOrgId == orgId || roleIds.Contains(d.RoleId));
+               Steps.Any(d => d.IsCanHandle(userId, orgId, roleIds));
     }
 
     private void RemoveCurrentHandleGroup(string handlerId, string handlerOrg)

+ 3 - 3
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -232,7 +232,7 @@ namespace Hotline.FlowEngine.Workflows
             var workflow = await GetWorkflowAsync(workflowId, withSteps: true, withCountersigns: true,
                 cancellationToken: cancellationToken);
 
-            var canHandle = workflow.CanHandle(userId, orgId, roleIds);
+            var canHandle = workflow.IsCanHandle(userId, orgId, roleIds);
             var canPrevious = false;
             if (canHandle)
             {
@@ -263,7 +263,7 @@ namespace Hotline.FlowEngine.Workflows
             string? orgAreaCode, string? orgAreaName,
             CancellationToken cancellationToken)
         {
-            if (!workflow.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles)) return;
+            if (!workflow.IsCanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles)) return;
             //工单完成以后查看的场景
             if (workflow.Status != EWorkflowStatus.Runnable) return;
 
@@ -1987,7 +1987,7 @@ namespace Hotline.FlowEngine.Workflows
 
         private void ValidatePermission(Workflow workflow, string OrgId, string UserId, string[] roleIds)
         {
-            if (!workflow.CanHandle(UserId, OrgId, roleIds))
+            if (!workflow.IsCanHandle(UserId, OrgId, roleIds))
                 throw UserFriendlyException.SameMessage("无办理权限");
         }
 

+ 11 - 0
src/Hotline/FlowEngine/Workflows/WorkflowStep.cs

@@ -223,6 +223,17 @@ public class WorkflowStep : StepBasicEntity
         }
     }
 
+    public bool IsCanHandle(string userId, string orgId, string[] roleIds)
+    {
+        if(Status is EWorkflowStepStatus.Handled) return false;
+        return FlowAssignType switch
+        {
+            EFlowAssignType.Org => !string.IsNullOrEmpty(HandlerOrgId) && HandlerOrgId == orgId,
+            EFlowAssignType.User => !string.IsNullOrEmpty(HandlerId) && HandlerId == userId,
+            EFlowAssignType.Role => !string.IsNullOrEmpty(RoleId) && roleIds.Contains(RoleId),
+            _ => throw new ArgumentOutOfRangeException()
+        };
+    }
     #endregion
 }