Пример #1
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()));
                }
            }
        }
        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));
        }
Пример #4
0
        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));
        }