Exemple #1
0
        public async Task <bool> AddToTeamAsync(Guid teamId, Guid userId, CancellationToken ct)
        {
            var teamQuery  = _context.Teams.Where(t => t.Id == teamId).Future();
            var userExists = _context.Users.Where(u => u.Id == userId).DeferredAny().FutureValue();

            var exerciseIdQuery = _context.Teams.Where(t => t.Id == teamId).Select(t => t.ExerciseId);

            var exerciseMembershipQuery = _context.ExerciseMemberships
                                          .Where(x => x.UserId == userId && exerciseIdQuery.Contains(x.ExerciseId))
                                          .Future();

            var team = (await teamQuery.ToListAsync()).SingleOrDefault();

            if (team == null)
            {
                throw new EntityNotFoundException <Team>();
            }

            if (!(await userExists.ValueAsync()))
            {
                throw new EntityNotFoundException <User>();
            }

            if (!(await _authorizationService.AuthorizeAsync(_user, null, new ExerciseAdminRequirement(team.ExerciseId))).Succeeded)
            {
                throw new ForbiddenException();
            }

            var exerciseMembership = (await exerciseMembershipQuery.ToListAsync()).FirstOrDefault();

            bool setPrimary = false;

            if (exerciseMembership == null)
            {
                exerciseMembership = new ExerciseMembershipEntity {
                    ExerciseId = team.ExerciseId, UserId = userId
                };
                _context.ExerciseMemberships.Add(exerciseMembership);
                await _context.SaveChangesAsync(ct);

                setPrimary = true;
            }

            var teamMembership = new TeamMembershipEntity {
                ExerciseMembershipId = exerciseMembership.Id, UserId = userId, TeamId = teamId
            };

            if (setPrimary)
            {
                exerciseMembership.PrimaryTeamMembership = teamMembership;
            }

            _context.TeamMemberships.Add(teamMembership);

            await _context.SaveChangesAsync(ct);

            await _userClaimsService.RefreshClaims(userId);

            return(true);
        }
Exemple #2
0
        public async Task <Team> SetPrimaryAsync(Guid teamId, Guid userId, CancellationToken ct)
        {
            if (!(await _authorizationService.AuthorizeAsync(_user, null, new SameUserRequirement(userId))).Succeeded)
            {
                throw new ForbiddenException("You can only change your own Primary Team.");
            }

            if (!(await _authorizationService.AuthorizeAsync(_user, null, new TeamMemberRequirement(teamId))).Succeeded)
            {
                throw new ForbiddenException("You can only change your Primary Team to a Team that you are a member of");
            }

            var teamEntity = await _context.Teams.SingleOrDefaultAsync(t => t.Id == teamId, ct);

            var viewMembership = await _context.ViewMemberships
                                 .Include(m => m.TeamMemberships)
                                 .SingleOrDefaultAsync(m => m.ViewId == teamEntity.ViewId && m.UserId == userId);

            var teamMembership = viewMembership.TeamMemberships.Where(m => m.TeamId == teamId).FirstOrDefault();

            viewMembership.PrimaryTeamMembershipId = teamMembership.Id;
            _context.ViewMemberships.Update(viewMembership);
            await _context.SaveChangesAsync(ct);

            await _claimsService.RefreshClaims(userId);

            var team = await GetAsync(teamId, ct);

            return(_mapper.Map <Team>(team));
        }
Exemple #3
0
        public async Task <bool> AddToTeamAsync(Guid teamId, Guid userId, CancellationToken ct)
        {
            var team = await _context.Teams
                       .Where(t => t.Id == teamId)
                       .FirstOrDefaultAsync();

            if (team == null)
            {
                throw new EntityNotFoundException <Team>();
            }

            var userExists = await _context.Users
                             .Where(u => u.Id == userId)
                             .AnyAsync(ct);

            if (!userExists)
            {
                throw new EntityNotFoundException <User>();
            }

            var viewIdQuery = _context.Teams.Where(t => t.Id == teamId).Select(t => t.ViewId);

            var viewMembership = await _context.ViewMemberships
                                 .Where(x => x.UserId == userId && viewIdQuery.Contains(x.ViewId))
                                 .SingleOrDefaultAsync(ct);

            if (!(await _authorizationService.AuthorizeAsync(_user, null, new ViewAdminRequirement(team.ViewId))).Succeeded)
            {
                throw new ForbiddenException();
            }

            bool setPrimary = false;

            if (viewMembership == null)
            {
                viewMembership = new ViewMembershipEntity {
                    ViewId = team.ViewId, UserId = userId
                };
                _context.ViewMemberships.Add(viewMembership);
                await _context.SaveChangesAsync(ct);

                setPrimary = true;
            }

            var teamMembership = new TeamMembershipEntity {
                ViewMembershipId = viewMembership.Id, UserId = userId, TeamId = teamId
            };

            if (setPrimary)
            {
                viewMembership.PrimaryTeamMembership = teamMembership;
            }

            _context.TeamMemberships.Add(teamMembership);

            await _context.SaveChangesAsync(ct);

            await _userClaimsService.RefreshClaims(userId);

            return(true);
        }