public async Task <CreateTeamRoleResponse> CreateTeamRoleAsync(CreateTeamRoleRequest request, ClaimsPrincipal claim) { var response = new CreateTeamRoleResponse(); var group = _context.TeamRoleGroups.Include(n => n.Conference) .FirstOrDefault(n => n.TeamRoleGroupId == request.RoleGroupId); if (group == null) { response.AddInvalidDataError("The given group was not found", nameof(request.RoleGroupId)); return(response); } var isAllowed = await _authService.IsUserAllowedToEditTeam(group.Conference.ConferenceId, claim); if (!isAllowed) { response.AddNoPermissionError("You don't have permission to create a Team role"); return(response); } ConferenceTeamRole parentRole = null; if (request.ParentRoleId != -1) { // We are also checking for the ConferenceId to make sure that the given Parent role is in // the same conference! parentRole = _context.ConferenceTeamRoles.FirstOrDefault(n => n.RoleId == request.ParentRoleId && n.Conference.ConferenceId == group.Conference.ConferenceId); } var role = new ConferenceTeamRole() { Conference = group.Conference, ParentTeamRole = parentRole, RoleName = request.RoleName, RoleShort = request.RoleShort, RoleFullName = request.RoleFullName, TeamRoleGroup = group, TeamRoleLevel = 0 }; _context.ConferenceTeamRoles.Add(role); await _context.SaveChangesAsync(); response.RoleId = role.RoleId; return(response); }
public async Task <IActionResult> CreateTeamRole([FromRoute] string teamId, [FromBody] CreateTeamRoleRequest request, CancellationToken cancellationToken) { var command = new CreateTeamRoleCommand ( ObjectId.Parse(teamId), request.Name, request.Permissions.Select(p => (Permission)Enum.Parse(typeof(Permission), p)).ToList() ); var @event = await _commandDispatcher.DispatchAsync(command, cancellationToken); var location = Url.RouteUrl("FindTeamRole", new { teamId, roleId = @event.RoleId }, null, Request.Host.Value); Response.Headers["Location"] = location; var response = new CreateTeamRoleResponse(@event.RoleId.ToString()); return(StatusCode(201, response)); }