Beispiel #1
0
        public IActionResult PostAssignment([FromBody] IEnumerable <SubgroupWithPinDto> subgroupWithPinDtos)
        {
            if (subgroupWithPinDtos == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                var userIdentifier = _registrationAuthorizationService.GetCurrentUserIdentifier(User);
                if (userIdentifier == null)
                {
                    return(BadRequest());
                }

                var user = _registrationRepository.GetUser(userIdentifier, includeRoles: false, includeSubgroups: true);
                if (user == null)
                {
                    return(NotFound());
                }

                _registrationRepository.RemoveAllAssignments(user);

                var hasAssignment = false;
                foreach (var assignment in subgroupWithPinDtos)
                {
                    if (!_registrationRepository.CheckSubgroupPin(assignment.Id, assignment.Pin))
                    {
                        continue;
                    }

                    var userSubgroup = new UserSubgroup
                    {
                        UserId     = user.Id,
                        SubgroupId = assignment.Id
                    };

                    _registrationRepository.AddAssignment(userSubgroup);
                    hasAssignment = true;
                }

                var role = _registrationAuthorizationService.GetRole(_userRoleName);
                if (hasAssignment)
                {
                    _registrationAuthorizationService.AddRole(user, role);
                }
                else
                {
                    _registrationAuthorizationService.RemoveRole(user, role);
                }

                if (!_registrationRepository.Save())
                {
                    return(StatusCode(500, "A problem happened while handling your request."));
                }

                var savedUser = _registrationRepository.GetUser(user.Id, includeRoles: false, includeSubgroups: true);

                var userToReturn = Mapper.Map <UserWithSubgroupsDto>(savedUser);

                return(Created("api/user/current", userToReturn));
            }
            catch (Exception)
            {
                return(StatusCode(500, "A problem happened while handling your request."));
            }
        }