Browse Source

Merge branch 'release' of http://git.12345lm.cn/Fengwo/hotline into release

qinchaoyue 6 months ago
parent
commit
fdc60f6e26

+ 6 - 2
src/Hotline.Repository.SqlSugar/Extensions/DataPermissionExtensions.cs

@@ -24,7 +24,9 @@ namespace Hotline.Repository.SqlSugar.Extensions
                     .Where(step => step.ExternalId == d.Id &&
                             ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == session.RequiredUserId) ||
                                (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId) ||
-                               (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId))))
+                               (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId))||
+                               (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId) && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId)
+							   ))
                     .Any());
 
             //return queryable.LeftJoin<WorkflowTrace>((d, step) => d.Id == step.ExternalId)
@@ -71,7 +73,9 @@ namespace Hotline.Repository.SqlSugar.Extensions
                                    step.TraceState != EWorkflowTraceState.StepRemoveByRecall) &&
                                ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == session.RequiredUserId) ||
                                 (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId) ||
-                                (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId))))
+                                (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId)) ||
+                                (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId) && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId )
+								))
                 .Any()
             );
             //return queryable.LeftJoin<WorkflowStep>((d, step) => d.Id == step.ExternalId)

+ 2 - 1
src/Hotline/FlowEngine/Workflows/WorkflowStep.cs

@@ -189,7 +189,8 @@ public class WorkflowStep : StepBasicEntity
             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()
+            EFlowAssignType.OrgAndRole => !string.IsNullOrEmpty(HandlerOrgId) && HandlerOrgId == orgId && !string.IsNullOrEmpty(RoleId) && roleIds.Contains(RoleId),
+			_ => throw new ArgumentOutOfRangeException()
         };
     }
     #endregion