public async Task <IActionResult> UpdateUserRoleAndEmail(string id) { if (string.IsNullOrEmpty(id)) { return(RedirectToAction("Users")); } var user = await _userManager.FindByIdAsync(id); if (user == null) { RedirectToAction("Users"); } var model = new UserEditRoleAndEmailViewModel { Id = id, UserName = user.UserName, Email = user?.Email, ApplicationRoleId = _roleManager.Roles .SingleOrDefault(r => r.Name == _userManager.GetRolesAsync(user).Result.SingleOrDefault())?.Id, ApplicationRoles = _roleManager.Roles.Select(r => new SelectListItem { Text = r.Name, Value = r.Id }) .ToList() }; return(View(model)); }
public async Task <IActionResult> UpdateUserRoleAndEmail(UserEditRoleAndEmailViewModel model) { if (ModelState.IsValid) { AppUser user = await _userManager.FindByIdAsync(model.Id); if (user != null) { if (!string.IsNullOrEmpty(model.Email)) { user.Email = model.Email; user.UserName = model.Email; IdentityResult result = await _userManager.UpdateAsync(user); if (result.Succeeded) { string existingRole = _userManager.GetRolesAsync(user).Result.SingleOrDefault(); string existingRoleId = _roleManager.Roles.SingleOrDefault(r => r.Name == existingRole)?.Id; if (existingRoleId == null) { IdentityRole applicationRole = await _roleManager.FindByIdAsync(model.ApplicationRoleId); if (applicationRole != null) { IdentityResult newRoleResult = await _userManager.AddToRoleAsync(user, applicationRole.Name); if (newRoleResult.Succeeded) { return(RedirectToAction("Users")); } } } else { if (existingRoleId != model.ApplicationRoleId) { IdentityResult roleResult = await _userManager.RemoveFromRoleAsync(user, existingRole); if (roleResult.Succeeded) { IdentityRole applicationRole = await _roleManager.FindByIdAsync(model.ApplicationRoleId); if (applicationRole != null) { IdentityResult newRoleResult = await _userManager.AddToRoleAsync(user, applicationRole.Name); if (newRoleResult.Succeeded) { return(RedirectToAction("Users")); } } } } } return(RedirectToAction("Users")); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } } } model.ApplicationRoles = _roleManager .Roles .Select(r => new SelectListItem { Text = r.Name, Value = r.Id }) .ToList(); return(View(model)); }