public IActionResult Create(EditableUserViewModel <UserWithPasswordViewModel> editableViewModel) { if (ModelState.IsValid) { var userViewModel = editableViewModel.UserViewModel as UserViewModel; var userModel = m_mapper.Map <UserModel>(userViewModel); var applicationUser = m_mapper.Map <ApplicationUser>(userModel); var result = m_identityUserManager .CreateAsync(applicationUser, editableViewModel.UserViewModel.Password).Result; if (result.Succeeded) { var roleResult = m_identityUserManager.AddToRolesAsync(applicationUser, editableViewModel.SelectableRoles?.Where(x => x.IsSelected).Select(x => x.Item.Name).ToList()).Result; if (roleResult.Succeeded) { return(RedirectToAction(nameof(View), new { id = applicationUser.Id })); } ModelState.AddModelError( roleResult.Errors.FirstOrDefault()?.Description); //TODO translate by code } ModelState.AddModelError( result.Errors.FirstOrDefault()?.Description); //TODO translate by code } var viewModel = ViewModelBuilder.BuildCreateUserViewModel(ModelState, editableViewModel.UserViewModel); return(View(viewModel)); }
public async Task <IActionResult> Edit(int id, EditableUserViewModel <UserViewModel> editableViewModel) { var authorized = m_authorizationService.AuthorizationForUserEditAsync(User, RoleNames.Admin, id); if (!authorized.Result) { return(Forbid()); } var userViewModel = editableViewModel.UserViewModel; var twoFactorCheckResult = await m_twoFactorValidator.CheckTwoFactorIsValidOrNotEnabledAsync(id, userViewModel); if (!twoFactorCheckResult.IsSuccessful) { ModelState.AddModelError("", twoFactorCheckResult.Message); } var userModel = m_mapper.Map <UserModel>(userViewModel); var appUser = m_mapper.Map <ApplicationUser>(userModel); var result = m_identityUserManager.UpdateAsync(id, appUser).Result; if (result.Succeeded) { if (int.TryParse(User.FindFirst(JwtClaimTypes.Subject).Value, out var value) && value == id) { await m_signInManager.ReloginUserAsync(id, false); //HACK check for persistent login } return(RedirectToAction(nameof(View), new { id })); } ModelState.AddModelError(result.Errors.FirstOrDefault()?.Description); //TODO translate by code var viewModel = await ViewModelBuilder.BuildEditableUserViewModelAsync(ModelState, userViewModel); return(View(viewModel)); }