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);
        }
예제 #2
0
        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()));
                }
            }
        }