public async Task ConfirmNewUserAsync(string userId, UserAndOrganizationDto userAndOrg) { var applicationUser = await _usersDbSet.FirstAsync(user => user.Id == userId); _userAdministrationValidator.CheckIfEmploymentDateIsSet(applicationUser.EmploymentDate); var hasRole = await _userManager.IsInRoleAsync(userId, Contracts.Constants.Roles.FirstLogin); _userAdministrationValidator.CheckIfUserHasFirstLoginRole(hasRole); var addRoleResult = await _userManager.AddToRoleAsync(userId, Contracts.Constants.Roles.User); var removeRoleResult = await _userManager.RemoveFromRoleAsync(userId, Contracts.Constants.Roles.NewUser); _userAdministrationValidator.CheckForAddingRemovingRoleErrors(addRoleResult.Errors.ToList(), removeRoleResult.Errors.ToList()); await _notificationService.SendConfirmedNotificationEmailAsync(applicationUser.Email, userAndOrg); SetTutorialStatus(applicationUser, false); await SetWelcomeKudosAsync(applicationUser); await AddUserToWallsForNewUsers(userAndOrg); await _uow.SaveChangesAsync(userAndOrg.UserId); }
private async Task AssignUsersToRole(RoleMiniViewModel roleViewModel) { var usersInModelIds = _mapper.Map <IEnumerable <ApplicationUserViewModel>, string[]>(roleViewModel.Users); var usersToAdd = await _applicationUserRepository.Get(u => u.Roles.Count(r => r.RoleId.Contains(roleViewModel.Id)) == 0 && usersInModelIds.Contains(u.Id)).ToListAsync(); foreach (var user in usersToAdd) { var state = await _userManager.AddToRoleAsync(user.Id, roleViewModel.Name); if (!state.Succeeded) { throw new SystemException(state.Errors.Aggregate(new StringBuilder(), (sb, a) => sb.AppendLine(string.Join(", ", a)), sb => sb.ToString())); } } var usersToRemove = await _applicationUserRepository.Get(u => u.Roles.Count(r => r.RoleId.Contains(roleViewModel.Id)) == 1 && !usersInModelIds.Contains(u.Id)).ToListAsync(); foreach (var user in usersToRemove) { var state = await _userManager.RemoveFromRoleAsync(user.Id, roleViewModel.Name); if (!state.Succeeded) { throw new SystemException(state.Errors.Aggregate(new StringBuilder(), (sb, a) => sb.AppendLine(string.Join(", ", a)), sb => sb.ToString())); } } }