private bool HasAccessAsManager(int memberId, MemberProjectRoleView projectRole) { var managerRoleId = Uow.ProjectRoleRepository.GetManagerRoleId(); var memberRoleId = Uow.ProjectRoleRepository.GetMemberRoleId(); //check if current user is manager on selected project and is trying to assign team member var hasAccessAsManager = Uow.MemberProjectRoleRepository.LinkedCacheGetList() .Any(r => r.ProjectId == projectRole.ProjectId && r.MemberId == memberId && r.RoleId == managerRoleId) && projectRole.RoleId == memberRoleId; return(hasAccessAsManager); }
public IActionResult Create([FromBody] MemberProjectRoleView projectRole) { try { var value = _service.Create(projectRole); var locationUri = $"{Request.Host}/{BaseODataRoute}/MemberProjectRoles({value.Id})"; return(Created(locationUri, value)); } catch (Exception e) { return(SendErrorODataResponse(e)); } }
public IActionResult Patch([FromODataUri] int id, [FromBody] MemberProjectRoleView projectRole) { projectRole.Id = id; try { var value = _service.Patch(projectRole); return(new ObjectResult(value)); } catch (Exception e) { return(SendErrorODataResponse(e)); } }
public MemberProjectRoleView Create(MemberProjectRoleView memberProjectRoleView) { var currentMember = Uow.MemberRepository.LinkedCacheGetByName(ImpersonatedUserName); if (currentMember == null) { throw new CoralTimeEntityNotFoundException($"Member with userName {ImpersonatedUserName} not found."); } if (!currentMember.User.IsActive) { throw new CoralTimeEntityNotFoundException($"Member with userName {ImpersonatedUserName} is not active."); } var memberProjectRole = Uow.MemberProjectRoleRepository.LinkedCacheGetList() .FirstOrDefault(r => r.ProjectId == memberProjectRoleView.ProjectId && r.MemberId == memberProjectRoleView.MemberId); if (memberProjectRole != null) { throw new CoralTimeAlreadyExistsException($"Project role with projectId = {memberProjectRoleView.ProjectId} and memberId = {memberProjectRoleView.MemberId} already exist"); } //check if current user is manager on selected project and is trying to assign team member var hasAccessAsManager = HasAccessAsManager(currentMember.Id, memberProjectRoleView); if (currentMember.User.IsAdmin || hasAccessAsManager) { memberProjectRole = new MemberProjectRole { MemberId = memberProjectRoleView.MemberId, ProjectId = memberProjectRoleView.ProjectId, RoleId = memberProjectRoleView.RoleId }; Uow.MemberProjectRoleRepository.Insert(memberProjectRole); Uow.Save(); Uow.MemberProjectRoleRepository.LinkedCacheClear(); UpdateIsManager(memberProjectRoleView.MemberId); var memberProjectRoleByIdResult = Uow.MemberProjectRoleRepository.LinkedCacheGetById(memberProjectRole.Id); var memberProjectRoleViewResult = memberProjectRoleByIdResult.GetView(Mapper, _avatarService.GetUrlIcon(memberProjectRole.MemberId)); return(memberProjectRoleViewResult); } throw new CoralTimeForbiddenException($"Member with id = {currentMember.Id} is not allowed to create MemberProjectRole on project with id = {memberProjectRoleView.ProjectId} and role with id = {memberProjectRoleView.RoleId}"); }
public IActionResult Create([FromBody] MemberProjectRoleView projectRole) { try { var value = _service.Create(this.GetUserNameWithImpersonation(), projectRole); var locationUri = $"{Request.Host}/api/v1/odata/MemberProjectRoles({value.Id})"; return(Created(locationUri, value)); } catch (Exception e) { _logger.LogWarning($"Create method with parameter ({JsonConvert.SerializeObject(projectRole)});\n {e}"); var errors = ExceptionsChecker.CheckProjectRolesException(e); return(BadRequest(errors)); } }
public IActionResult Patch(int id, [FromBody] MemberProjectRoleView projectRole) { projectRole.Id = id; try { var value = _service.Patch(this.GetUserNameWithImpersonation(), projectRole); return(new ObjectResult(value)); } catch (Exception e) { _logger.LogWarning($"Patch method with parameters ({id}, {projectRole});\n {e}"); var errors = ExceptionsChecker.CheckProjectRolesException(e); return(BadRequest(errors)); } }
public MemberProjectRoleView Patch(MemberProjectRoleView projectRole) { var memberByUserName = Uow.MemberRepository.LinkedCacheGetByName(InpersonatedUserName); if (memberByUserName == null) { throw new CoralTimeEntityNotFoundException($"Member with userName = {InpersonatedUserName} not found."); } if (!memberByUserName.User.IsActive) { throw new CoralTimeEntityNotFoundException($"Member with userName = {InpersonatedUserName} is not active."); } var memberProjectRoleById = Uow.MemberProjectRoleRepository.GetById(projectRole.Id); if (memberProjectRoleById == null) { throw new CoralTimeEntityNotFoundException($"ProjectRole with id = {projectRole.Id} not found"); } var hasAccessAsManager = HasAccessAsManager(memberByUserName.Id, projectRole); if (memberByUserName.User.IsAdmin || hasAccessAsManager) { memberProjectRoleById.RoleId = projectRole.RoleId; Uow.MemberProjectRoleRepository.Update(memberProjectRoleById); Uow.Save(); Uow.MemberProjectRoleRepository.LinkedCacheClear(); UpdateIsManager(memberProjectRoleById.MemberId); var memberProjectRoleByIdResult = Uow.MemberProjectRoleRepository.LinkedCacheGetById(projectRole.Id); var model = memberProjectRoleByIdResult.GetViewWithGlobalProjects(Mapper); AddIconUrl(model); return(model); } throw new CoralTimeForbiddenException($"Member with id = {memberByUserName.Id} is not allowed to patch projectRole on project with id = {projectRole.ProjectId} and role with id = {projectRole.RoleId}"); }
private void AddIconUrl(MemberProjectRoleView item) { _avatarService.AddIconUrlInViewModel(item); }