Exemplo n.º 1
0
        public async Task <ActionResult> Update(UserEditorVM vm)
        {
            if (!ModelState.IsValid)
            {
                return(await ViewUpdateFormAsync(vm));
            }

            try
            {
                if (vm.CreatePersonalPage && await _users.CanCreatePersonalPageAsync(vm))
                {
                    var page = await _pages.CreateDefaultUserPageAsync(vm, User);

                    vm.PersonalPageId     = page.Id;
                    vm.CreatePersonalPage = false;
                }

                await _users.UpdateAsync(vm, User);

                await _db.SaveChangesAsync();

                return(RedirectToSuccess("Пользователь обновлен"));
            }
            catch (ValidationException ex)
            {
                SetModelState(ex);
                return(await ViewUpdateFormAsync(vm));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Performs additional checks on the request.
        /// </summary>
        private async Task ValidateUpdateRequestAsync(UserEditorVM request)
        {
            var val = new Validator();

            var emailUsed = await _db.Users
                            .AnyAsync(x => x.Id != request.Id && x.Email == request.Email);

            if (emailUsed)
            {
                val.Add(nameof(request.Email), "Адрес почты уже используется другим пользователем");
            }

            if (request.PersonalPageId != null)
            {
                var exists = await _db.Pages
                             .AnyAsync(x => x.Id == request.PersonalPageId);

                if (!exists)
                {
                    val.Add(nameof(request.PersonalPageId), "Страница не существует");
                }
            }

            val.ThrowIfInvalid();
        }
Exemplo n.º 3
0
 /// <summary>
 /// Checks if the personal page should be created for this user.
 /// </summary>
 public async Task <bool> CanCreatePersonalPageAsync(UserEditorVM vm)
 {
     return(await _db.Users
            .Where(x => x.Id == vm.Id)
            .Select(x => x.Page == null)
            .FirstOrDefaultAsync());
 }
Exemplo n.º 4
0
        /// <summary>
        /// Updates the user.
        /// </summary>
        public async Task <AppUser> UpdateAsync(UserEditorVM request, ClaimsPrincipal currUser)
        {
            await ValidateUpdateRequestAsync(request);

            var user = await _db.Users
                       .GetAsync(x => x.Id == request.Id, "Пользователь не найден");

            _mapper.Map(request, user);
            user.IsValidated = true;

            if (!IsSelf(request.Id, currUser))
            {
                var allRoles = await _userMgr.GetRolesAsync(user);

                await _userMgr.RemoveFromRolesAsync(user, allRoles);

                var role = request.Role.ToString();
                await _userMgr.AddToRoleAsync(user, role);
            }

            if (request.IsLocked && user.LockoutEnd == null)
            {
                user.LockoutEnd = DateTimeOffset.MaxValue;
            }
            else if (!request.IsLocked && user.LockoutEnd != null)
            {
                user.LockoutEnd = null;
            }

            return(user);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Displays the UpdateUser form.
        /// </summary>
        private async Task <ActionResult> ViewUpdateFormAsync(UserEditorVM vm)
        {
            var canCreate = await _users.CanCreatePersonalPageAsync(vm);

            var pageItems = await GetPageItemsAsync(vm.PersonalPageId);

            ViewBag.Data = new UserEditorDataVM
            {
                IsSelf                = _users.IsSelf(vm.Id, User),
                UserRoleItems         = ViewHelper.GetEnumSelectList(vm.Role),
                CanCreatePersonalPage = canCreate,
                PageItems             = pageItems
            };

            return(View("Update", vm));
        }
Exemplo n.º 6
0
        /// <summary>
        /// Updates the user.
        /// </summary>
        public async Task <AppUser> UpdateAsync(UserEditorVM request, ClaimsPrincipal currUser)
        {
            await ValidateUpdateRequestAsync(request);

            var user = await _db.Users
                       .GetAsync(x => x.Id == request.Id, "Пользователь не найден");

            _mapper.Map(request, user);
            user.IsValidated = true;

            if (!IsSelf(request.Id, currUser))
            {
                var allRoles = EnumHelper.GetEnumValues <UserRole>().Select(x => x.ToString());
                await _userMgr.RemoveFromRolesAsync(user, allRoles);

                var role = request.Role.ToString();
                await _userMgr.AddToRoleAsync(user, role);
            }

            return(user);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Returns the select list for a page picker.
        /// </summary>
        private async Task <IReadOnlyList <SelectListItem> > GetPageItemsAsync(UserEditorVM vm)
        {
            if (vm.PersonalPageId != null)
            {
                var page = await _db.Pages
                           .Where(x => x.Id == vm.PersonalPageId)
                           .Select(x => x.Title)
                           .FirstOrDefaultAsync();

                if (!string.IsNullOrEmpty(page))
                {
                    return new[] { new SelectListItem(page, vm.PersonalPageId.Value.ToString(), true) }
                }
                ;
            }

            return(Array.Empty <SelectListItem>());
        }

        #endregion
    }
Exemplo n.º 8
0
 /// <summary>
 /// Checks if the personal page can be created for this user.
 /// </summary>
 public async Task <bool> CanCreatePersonalPageAsync(UserEditorVM vm)
 {
     return(await _db.Users
            .Where(x => x.Id == vm.Id && x.Page == null)
            .AnyAsync());
 }