public Edit_Incident_Handler(IUser user)
 {
     APF = Australian_Parachute_Federation.Instance;
     //user = APF.Searcher.Find_User("13E98653-675F-44E6-A0A2-E2E40261F8FE");
     //role = APF.Searcher.Find_Role("70CAAFBC-B595-4D98-85CF-FCDC913FDB9D");
     _userInRole = (IUserInRole)APF.Searcher.Find_User_In_Role(user.User_ID);
 }
 public ModifyIncidentHandler()
 {
     APF = Australian_Parachute_Federation.Instance;
     _reporter = APF.Searcher.Find_User("13E98653-675F-44E6-A0A2-E2E40261F8FE");
     _role = APF.Searcher.Find_Role("70CAAFBC-B595-4D98-85CF-FCDC913FDB9D");
     _userInRole = (IUserInRole)APF.Searcher.Find_User_In_Role(_reporter.User_ID, _role.Role_ID);
 }
        /// <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>
        /// 判断某用户是否具有对指定实例进行指定动作的执行权限
        /// </summary>
        /// <param name="instance">工作流实例</param>
        /// <param name="actionName">执行动作</param>
        /// <returns></returns>
        public virtual bool CanDoAction(WorkflowInstance instance, string actionName)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            if (string.IsNullOrEmpty(actionName))
            {
                throw new ArgumentNullException("actionName");
            }
            IUserInRole   userInRole   = WorkflowRuntime.Current.GetService <IIdentityService>().GetUserInRole();
            IUserIdentity userIdentity = WorkflowRuntime.Current.GetService <IIdentityService>().GetUserIdentity();

            if (GetActionRole(instance, userIdentity.GetUserId(), actionName) != null)
            {
                return(true);
            }
            ApprovalEvent        approvalEvent   = ((StateMachineWorkflowInstance)instance).CurrentState.GetEventByName(actionName);
            IApprovalSaveService approvalService = WorkflowRuntime.Current.GetService <IApprovalSaveService>();
            List <ApprovalAgent> agentList       = approvalService.GetValidAgentInfoByToUser(userIdentity.GetUserId());

            if (agentList != null && agentList.Count > 0)
            {
                foreach (ApprovalAgent agentInfo in agentList)
                {
                    foreach (EventRole role in approvalEvent.Roles)
                    {
                        if (IsAuthorized(agentInfo.SetUserId, approvalEvent, instance))
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
        /// <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()));
        }