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())); } } }
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); }
public async Task <HttpResponseMessage> PutPersonalInfo(ApplicationUserPutPersonalInfoViewModel model) { var validatedModel = ValidateModel(model); if (!validatedModel.IsSuccessStatusCode) { return(validatedModel); } var userOrg = GetUserAndOrganization(); var user = _applicationUserRepository.GetByID(model.Id); if (user == null) { return(Request.CreateResponse(HttpStatusCode.NotFound, new[] { string.Format(Resources.Common.DoesNotExist, Resources.Models.ApplicationUser.ApplicationUser.EntityName) })); } if ((user.FirstName != model.FirstName || user.LastName != model.LastName) && !HasPermission(userOrg, AdministrationPermissions.ApplicationUser)) { return(Request.CreateResponse(HttpStatusCode.Forbidden)); } if (_applicationUserRepository.Get(u => u.Email == model.Email && u.Id != user.Id).Any()) { return(Request.CreateResponse(HttpStatusCode.BadRequest, new[] { string.Format(Resources.Models.ApplicationUser.ApplicationUser.EmailAlreadyExsists) })); } if (user.PictureId != model.PictureId && !string.IsNullOrEmpty(user.PictureId)) { await _pictureService.RemoveImage(user.PictureId, userOrg.OrganizationId); } _mapper.Map(model, user); _applicationUserRepository.Update(user); _unitOfWork.Save(); var response = default(object); if (!User.IsInRole(Roles.NewUser) || !_userManager.IsInRole(user.Id, Roles.FirstLogin)) { return(Request.CreateResponse(HttpStatusCode.OK)); } await _userManager.RemoveFromRoleAsync(User.Identity.GetUserId(), Roles.FirstLogin); _administrationUsersService.NotifyAboutNewUser(user, userOrg.OrganizationId); var requiresConfirmation = _organizationService.RequiresUserConfirmation(userOrg.OrganizationId); if (!requiresConfirmation) { _administrationUsersService.ConfirmNewUser(userOrg.UserId, userOrg); } response = new { requiresConfirmation }; return(Request.CreateResponse(HttpStatusCode.OK, response)); }
public async Task <HttpResponseMessage> PutPersonalInfo(ApplicationUserPutPersonalInfoViewModel model) { var validatedModel = ValidateModel(model); if (!validatedModel.IsSuccessStatusCode) { return(validatedModel); } var userOrg = GetUserAndOrganization(); var user = _applicationUserRepository.GetByID(model.Id); if (user == null) { return(Request.CreateResponse(HttpStatusCode.NotFound, new[] { string.Format(Resources.Common.DoesNotExist, Resources.Models.ApplicationUser.ApplicationUser.EntityName) })); } if ((user.FirstName != model.FirstName || user.LastName != model.LastName) && !HasPermission(userOrg, AdministrationPermissions.ApplicationUser)) { return(Request.CreateResponse(HttpStatusCode.Forbidden)); } if (_applicationUserRepository.Get(u => u.Email == model.Email && u.Id != user.Id).Any()) { return(Request.CreateResponse(HttpStatusCode.BadRequest, new[] { string.Format(Resources.Models.ApplicationUser.ApplicationUser.EmailAlreadyExsists) })); } _mapper.Map(model, user); _applicationUserRepository.Update(user); _unitOfWork.Save(); var response = default(object); if (User.IsInRole(Roles.NewUser) && _userManager.IsInRole(user.Id, Roles.FirstLogin)) { await _userManager.RemoveFromRoleAsync(User.Identity.GetUserId(), Roles.FirstLogin); _administrationUsersService.NotifyAboutNewUser(user, userOrg.OrganizationId); var requiresConfirmation = _organizationService.RequiresUserConfirmation(userOrg.OrganizationId); if (!requiresConfirmation) { _administrationUsersService.ConfirmNewUser(userOrg.UserId, userOrg); } response = new { requiresConfirmation }; } var cache = Configuration.CacheOutputConfiguration().GetCacheOutputProvider(Request); cache.RemoveStartsWith(Configuration.CacheOutputConfiguration().MakeBaseCachekey((BirthdaysController t) => t.GetWeeklyBirthdays())); return(response != null?Request.CreateResponse(HttpStatusCode.OK, response) : Request.CreateResponse(HttpStatusCode.OK)); }