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.")); } }