Как я могу получить список возможных переходов для данной роли в рабочем процессе конечного автомата?

StackOverflow https://stackoverflow.com/questions/614969

Вопрос

Как нам определить возможные переходы для данной роли в заданном рабочем процессе конечного автомата?В моем сценарии только определенные роли имеют разрешение на выполнение определенных действий.Я должен получить этот список.Вспомогательный класс StateMachineWorkflowInstance здесь это бесполезно, поскольку оно просто возвращает все возможные переходы, игнорируя роль актера.

Любая помощь здесь была бы признательна.

Спасибо, Сократи.

Это было полезно?

Решение

Похоже, прямого способа сделать это не существует.Я написал этот метод, основанный примерно на решении в Блог Руурда Боеке .Я получаю список возможных событий, а затем смотрю, могут ли они быть выполнены ролью пользователя.Это обходной путь, но все равно работает нормально.

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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top