Esempio n. 1
0
        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));
        }