代码之家  ›  专栏  ›  技术社区  › 

如何获取状态机工作流中给定角色的可能转换列表?

  •  0
  •  · 技术社区  · 5 年前

    在给定的状态机工作流上,我们如何找出给定角色的可能转换。在我的场景中,只有某些角色具有执行某些活动的权限。我得去拿名单。帮助程序类 StateMachineWorkflowInstance 这里没有帮助,因为它只返回所有可能的转换,忽略了参与者的角色。

    如有任何帮助,我们将不胜感激。

    谢谢, 苏格拉底。

    1 回复  |  直到 5 年前
        1
  •  0
  •       15 年前

    看来没有直接的方法可以做到这一点。我写这个方法是基于 Ruurd Boeke's blog . 我正在获取可能事件的列表,然后查看它们是否可以由用户角色执行。这是一个工作,但仍然很好。

    public string[] GetTransistions(string strUser)
    {
        string[] strRoles = System.Web.Security.Roles.GetRolesForUser(strUser);
        List<string> strActivity = new List<string>();
        ReadOnlyCollection<WorkflowQueueInfo> queues = workflowInstance.GetWorkflowQueueData();
        foreach (WorkflowQueueInfo info in queues)
        {
            if (!info.QueueName.Equals("SetStateQueue"))
            {
                foreach (string subscribedActivity in info.SubscribedActivityNames)
                {
                    HandleExternalEventActivity heea = workflowInstance.GetWorkflowDefinition().GetActivityByName(subscribedActivity) as HandleExternalEventActivity;
    
                    #region check roles
                    if (heea.Roles != null)
                    {
                        foreach (WorkflowRole workflowRole in heea.Roles)
                        {
                            foreach (string strRole in strRoles)
                            {
                                if (workflowRole.Name.Equals(strRole))
                                {
                                    strActivity.Add(heea.EventName);
                                    //permissionLog += workflowRole.Name + " can perform " + heea.EventName + " Activity. ";
                                }
                            }
                        }
                    }
                    #endregion
                }
            }
        }
        return strActivity.ToArray();
    }
    
    推荐文章