public static bool CanChangeRoleOfMember(this AppUserRole caller, AppUserRole oldRole, AppUserRole newRole) { if (caller.IsNone() || oldRole.IsNone() || newRole.IsNone()) { return(false); } if (!HasPermissionsToChangeRoleOfMember(caller)) { return(false); } if (oldRole == newRole) { return(false); } if (oldRole.IsOwner() || newRole.IsOwner()) { return(false); } if ((oldRole.IsScrumMaster() || newRole.IsScrumMaster()) && !caller.IsOwner()) { return(false); } return(true); }
private async Task <AppUserRole> GetRoleIfMember(string userId, int projectId) { AppUserRole role = await _puRepo.GetRoleOfMember(userId, projectId); if (role.IsNone()) { throw new NotFoundResponseException("Project not found or you don't have permissions."); } return(role); }
public static bool CanViewListOfMembers(this AppUserRole role) { if (!role.IsNone()) { return(true); } else { return(false); } }
public static bool CanRemoveItself(this AppUserRole role) { if (role.IsOwner() || role.IsNone()) { return(false); } else { return(true); } }
public async Task AddMemberAsync(string senderUserId, int projectId, string userId, AppUserRoleDto roleDto) { AppUserRole senderRole = await GetRoleIfMember(senderUserId, projectId); if (!senderRole.CanAddNewMember()) { throw new ForbiddenResponseException("You haven't permissions to add members to this project"); } if (!await _userRepo.ExistsWithId(userId)) { throw new NotFoundResponseException("Cannot find user to add into project."); } if (!((await _puRepo.GetRoleOfMember(userId, projectId)).IsNone())) { throw new BadRequestResponseException("This user already exists in project."); } AppUserRole role = _mapper.Map <AppUserRoleDto, AppUserRole>(roleDto); if (role.IsNone()) { throw new BadRequestResponseException("Given role is bad."); } if (role.IsOwner()) { throw new BadRequestResponseException("Cannot add Owner to project."); } if (role.IsScrumMaster() && await _puRepo.DoesExistScrumMasterInProjectAsync(projectId)) { throw new BadRequestResponseException("Scrum Master already exists in project."); } var pu = new ProjectUser() { ProjectId = projectId, UserId = userId, UserRoleId = role.Id }; await _puRepo.CreateRecordAsync(pu); }
public async Task <ProjectMemberDto> GetMemberOfProjectAsync(string senderUserId, int projectId, string userId) { AppUserRole senderRole = await GetRoleIfMember(senderUserId, projectId); if (!senderRole.CanViewListOfMembers()) { throw new ForbiddenResponseException("You cannot get list of members of this project"); } AppUserRole role = await _puRepo.GetRoleOfMember(userId, projectId); if (!role.IsNone()) { User u = await _userRepo.GetByIdAsync(userId); ProjectMemberDto dto = MakeProjectMemberDto(u, role); return(dto); } else { throw new NotFoundResponseException($"No member with id {userId} in project with id {projectId}"); } }