public IActionResult CreateAccount(string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; var viewmodel = new CreateUserFormView { ApplicationRoles = _unitOfWork.Role.GetRoles() }; return(View(viewmodel)); }
public async Task <IActionResult> CreateAccount(int id, CreateUserFormView userFormView, string returnUrl = null) { if (ModelState.IsValid) { ApplicationUser user = id == 0 ? new ApplicationUser() : await _userManager.FindByIdAsync(id.ToString()); user.UserName = userFormView.UserName; user.Email = userFormView.Email; user.Firstname = userFormView.Firstname; user.LastName = userFormView.Lastname; user.PasswordHash = userFormView.Password; user.PhoneNumber = userFormView.PhoneNumber.ToString(); string existingRole = _userManager.GetRolesAsync(user).Result.Single(); int existingRoleId = _roleManager.Roles.Single(r => r.Name == existingRole).Id; IdentityResult result = id == 0 ? await _userManager.CreateAsync(user, userFormView.Password) : await _userManager.UpdateAsync(user); if (result.Succeeded) { if (existingRoleId != userFormView.RoleId) { IdentityResult roleResult = await _userManager.RemoveFromRoleAsync(user, existingRole); if (roleResult.Succeeded) { ApplicationRole applicationRole = await _roleManager.FindByIdAsync(userFormView.RoleId.ToString()); if (applicationRole != null) { IdentityResult newRoleResult = await _userManager.AddToRoleAsync(user, applicationRole.Name); if (newRoleResult.Succeeded) { return(RedirectToAction(returnUrl)); } } } } } } return(View(userFormView)); }