/// <summary>
        /// 获取指定用户Id的审批角色列表
        /// </summary>
        /// <param name="workflowName">工作流名称</param>
        /// <param name="userId">用户Id</param>
        /// <returns>用户所在的审批角色</returns>
        public static List <ApprovalRole> GetUserRoles(string workflowName, string userId)
        {
            List <ApprovalRole> rolesList = new List <ApprovalRole>();

            //如果用户id为空,那么返回空角色集合
            if (string.IsNullOrEmpty(userId))
            {
                return(rolesList);
            }

            IUserInRole          userInRole = WorkflowRuntime.Current.GetService <IIdentityService>().GetUserInRole();
            StateMachineWorkflow workflow   = (StateMachineWorkflow)WorkflowRuntime.Current.GetService <IWorkFlowDefinePersistService>().GetWorkflowDefine(workflowName);

            foreach (ApprovalRole approvalRole in workflow.Roles)
            {
                if (userInRole.IsUserInRole(userId, approvalRole.Name))
                {
                    if (!rolesList.Contains(approvalRole))
                    {
                        rolesList.Add(approvalRole);
                    }
                }
            }
            return(rolesList);
        }
        /// <summary>
        /// Determines whether the specified user id is authorized.
        /// </summary>
        /// <param name="userId">The user id.</param>
        /// <param name="approvalEvent">The approval event.</param>
        /// <param name="isOwner">if set to <c>true</c> [is owner].</param>
        /// <param name="role">The role.</param>
        /// <returns>
        ///     <c>true</c> if the specified user id is authorized; otherwise, <c>false</c>.
        /// </returns>
        public virtual bool IsAuthorized(string userId, ApprovalEvent approvalEvent, bool isOwner, EventRole role)
        {
            IUserInRole userInRole = WorkflowRuntime.Current.GetService <IIdentityService>().GetUserInRole();

            return(userInRole.IsUserInRole(userId, role.Name) && ((isOwner && approvalEvent.Authorization == Authorization.OwnerOnly.ToString()) || (!isOwner && approvalEvent.Authorization == Authorization.DenyOwner.ToString()) || approvalEvent.Authorization == Authorization.All.ToString()));
        }