public bool RemoveRoleFromUser(Guid userID, Guid departmentID, int roleCode) { DepartmentMemberService departmentMemberService = new DepartmentMemberService(this.UnitOfWork); var data = departmentMemberService.GetList(departmentID, roleCode, userID).FirstOrDefault(); if (data != null) { departmentMemberService.Delete(data.ID); } return(true); }
public bool AddRoleToUser(Guid userID, Guid departmentID, int roleCode) { DepartmentMemberService departmentMemberService = new DepartmentMemberService(this.UnitOfWork); if (departmentMemberService.GetList(departmentID, roleCode, userID).Count == 0) { sysBpmsDepartmentMember sysBpmsDepartmentMember = new sysBpmsDepartmentMember(); sysBpmsDepartmentMember.Update(departmentID, userID, roleCode); departmentMemberService.Add(sysBpmsDepartmentMember); } return(true); }
/// <summary> /// this method check whether current user has access to this task or not. /// </summary> /// <param name="userId">set to currnet User ID if user has logined otherwise set to null</param> /// <returns></returns> public (bool, string) CheckAccess(Guid threadTaskID, Guid?userId, Guid processId, bool isPost, bool accessByTracking = false) { sysBpmsThreadTask threadTask = this.GetInfo(threadTaskID); if (isPost && !new ProcessService(base.UnitOfWork).GetInfo(processId).AllowNextFlow()) { return(false, LangUtility.Get("NotAllowNextFlow.Text", nameof(sysBpmsThreadTask))); } if (threadTask.StatusLU == (int)sysBpmsThreadTask.e_StatusLU.New || threadTask.StatusLU == (int)sysBpmsThreadTask.e_StatusLU.Ongoing) { if (threadTask.OwnerUserID.HasValue && threadTask.OwnerUserID == userId) { return(true, ""); } if (userId.HasValue) { List <sysBpmsDepartmentMember> listDepartmentMember = new DepartmentMemberService(base.UnitOfWork).GetList(null, null, userId.Value); if (listDepartmentMember.Any(c => threadTask.GetDepartmentRoles.Any(d => (!d.Item1.HasValue || d.Item1 == c.DepartmentID) && d.Item2.ToIntObj() == c.RoleLU))) { return(true, ""); } } else { if (!threadTask.Thread.UserID.HasValue && !threadTask.OwnerUserID.HasValue && string.IsNullOrWhiteSpace(threadTask.OwnerRole)) { return(true, ""); } } if (threadTask.Task.UserTaskRuleModel?.AccessType != (int)UserTaskRuleModel.e_UserAccessType.Static && threadTask.Task.UserTaskRuleModel?.AccessType != (int)UserTaskRuleModel.e_UserAccessType.Variable) { return(true, ""); } if (accessByTracking && threadTask.Task.IsInRole(null, (int)sysBpmsDepartmentMember.e_RoleLU.Requester)) { return(true, ""); } } return(false, LangUtility.Get("AccessError.Text", nameof(sysBpmsThreadTask))); }
public ResultOperation Delete(Guid departmentId) { ResultOperation resultOperation = new ResultOperation(); try { sysBpmsDepartment department = this.GetInfo(departmentId); if (department.DepartmentID.HasValue) { resultOperation.AddError("This Organization has children, so delete the children first."); } if (resultOperation.IsSuccess) { DepartmentMemberService departmentMemberService = new DepartmentMemberService(base.UnitOfWork); ApplicationPageAccessService applicationPageAccessService = new ApplicationPageAccessService(base.UnitOfWork); var members = departmentMemberService.GetList(departmentId, null, null); var accesses = applicationPageAccessService.GetList(departmentId); this.BeginTransaction(); foreach (var item in members) { departmentMemberService.Delete(item.ID); } foreach (var item in accesses) { applicationPageAccessService.Delete(item.ID); } this.UnitOfWork.Repository <IDepartmentRepository>().Delete(departmentId); this.UnitOfWork.Save(); } } catch (Exception ex) { return(base.ExceptionHandler(ex)); } base.FinalizeService(resultOperation); return(resultOperation); }
public ResultOperation Delete(Guid userId) { ResultOperation resultOperation = new ResultOperation(); if (resultOperation.IsSuccess) { try { this.BeginTransaction(); //delete email accounts EmailAccountService emailAccountService = new EmailAccountService(base.UnitOfWork); var emailList = emailAccountService.GetList((int)sysBpmsEmailAccount.e_ObjectTypeLU.User, userId, null); foreach (var item in emailList) { emailAccountService.Delete(item.ID); } //delete department member. DepartmentMemberService departmentMemberService = new DepartmentMemberService(base.UnitOfWork); var members = departmentMemberService.GetList(null, null, userId); foreach (var item in members) { departmentMemberService.Delete(item.ID); } this.UnitOfWork.Repository <IUserRepository>().Delete(userId); this.UnitOfWork.Save(); } catch (Exception ex) { resultOperation.AddError(LangUtility.Get("UserUsedError.Text", nameof(sysBpmsUser))); return(base.ExceptionHandler(new Exception(LangUtility.Get("UserUsedError.Text", nameof(sysBpmsUser))))); } } base.FinalizeService(resultOperation); return(resultOperation); }
public Guid?GetDepartmentHierarchyByUserId(Guid userID, int roleCode, bool goUpDepartment = true) { Guid[] departments = new DepartmentMemberService(this.UnitOfWork).GetList(null, null, userID).Select(c => c.DepartmentID).Distinct().ToArray(); return(new DepartmentMemberService(this.UnitOfWork).GetListHierarchy(departments, roleCode, goUpDepartment).FirstOrDefault()?.DepartmentID); }
public List <sysBpmsThreadTask> GetMultiInstanceTask(Domain.sysBpmsTask task, EngineSharedModel engineSharedModel) { sysBpmsThreadTask threadTask = null; List <sysBpmsThreadTask> list = new List <sysBpmsThreadTask>(); switch ((sysBpmsTask.e_OwnerTypeLU)task.OwnerTypeLU) { case sysBpmsTask.e_OwnerTypeLU.User: switch ((UserTaskRuleModel.e_UserAccessType)task.UserTaskRuleModel.AccessType) { case UserTaskRuleModel.e_UserAccessType.Static: case UserTaskRuleModel.e_UserAccessType.Variable: string userId = task.UserID; if (task.UserTaskRuleModel.AccessType == (int)UserTaskRuleModel.e_UserAccessType.Variable) { userId = new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj(); } int i = 0; foreach (string item in userId.Split(',')) { threadTask = new sysBpmsThreadTask(); threadTask.Update(engineSharedModel.CurrentThreadID.Value, task.ID, DateTime.Now.AddSeconds(i++), null, string.Empty, 0, (int)sysBpmsThreadTask.e_StatusLU.New); threadTask.UpdateAccessInfo(item.ToGuidObj(), null); list.Add(threadTask); } break; } break; case sysBpmsTask.e_OwnerTypeLU.Role: switch ((UserTaskRuleModel.e_RoleAccessType)task.UserTaskRuleModel.AccessType) { case UserTaskRuleModel.e_RoleAccessType.Static: case UserTaskRuleModel.e_RoleAccessType.Variable: if (task.UserTaskRuleModel.AccessType == (int)UserTaskRuleModel.e_RoleAccessType.Variable) { task.SetRoleDepartment(new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj(), task.UserTaskRuleModel.SpecificDepartmentId); } foreach (var item in task.GetDepartmentRoles) { List <Guid> users = new DepartmentMemberService(base.UnitOfWork).GetList(item.Item1, item.Item2.ToIntObj(), null).Select(c => c.UserID).ToList(); //It is used for sequential task. int i = 0; foreach (Guid uId in users) { threadTask = new sysBpmsThreadTask(); threadTask.Update(engineSharedModel.CurrentThreadID.Value, task.ID, DateTime.Now.AddSeconds(i++), null, string.Empty, 0, (int)sysBpmsThreadTask.e_StatusLU.New); threadTask.UpdateAccessInfo(uId, null); list.Add(threadTask); } } break; case UserTaskRuleModel.e_RoleAccessType.CorrespondentRole: Guid?userId = task.UserTaskRuleModel.UserType == (int)UserTaskRuleModel.e_UserType.CurrentUserID ? new UserService(base.UnitOfWork).GetInfo(engineSharedModel.CurrentUserName ?? "")?.ID : engineSharedModel.CurrentThread?.UserID; Guid?departmentId = new AccessCodeHelper(base.UnitOfWork).GetDepartmentHierarchyByUserId(userId.ToGuidObj(), task.UserTaskRuleModel.RoleCode.ToIntObj(), task.UserTaskRuleModel.GoUpDepartment); if (!departmentId.HasValue) { throw new Exception(LangUtility.Get("OrganizationNotFound.Text", nameof(sysBpmsThreadTask))); } { List <Guid> users = new DepartmentMemberService(base.UnitOfWork).GetList(departmentId, task.UserTaskRuleModel.RoleCode.ToIntObj(), null).Select(c => c.UserID).ToList(); //It is used for sequential task. int i = 0; foreach (Guid uId in users) { threadTask = new sysBpmsThreadTask(); threadTask.Update(engineSharedModel.CurrentThreadID.Value, task.ID, DateTime.Now.AddSeconds(i++), null, string.Empty, 0, (int)sysBpmsThreadTask.e_StatusLU.New); threadTask.UpdateAccessInfo(uId, null); list.Add(threadTask); } } break; } break; } return(list); }