public async Task <IActionResult> CreateNewUser(ComiteUserEditViewModel vm) { if (ModelState.IsValid) { try { var user = new IdentityUser { UserName = vm.Email, Email = vm.Email }; await _userManager.CreateAsync(user, vm.Password); List <Claim> roles = new List <Claim>(); foreach (var role in vm.SelectedRoles) { if (role.Selected) { roles.Add(new Claim(ClaimTypes.Role, role.Role)); } } await _userManager.AddClaimsAsync(user, roles); TempData["message"] = $"De nieuwe gebruiker {vm.Email} werd succesvol aangemaakt"; } catch (Exception ex) { TempData["error"] = $"Er ging iets mis! Error: {ex.Message}"; } return(RedirectToAction(nameof(Index))); } return(View(vm)); }
public async Task <IActionResult> EditUser(ComiteUserEditViewModel vm) { if (ModelState.IsValid) { var user = await _userManager.FindByIdAsync(vm.UserId); if (user == null) { return(NotFound($"User {vm.UserId} does not exist")); } var claims = await _userManager.GetClaimsAsync(user); var roles = claims.Where(c => c.Type == ClaimTypes.Role).Select(c => c.Value).ToList(); foreach (var claim in vm.SelectedRoles) { if (claim.Selected && !roles.Contains(claim.Role)) { await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, claim.Role)); } else if (!claim.Selected && roles.Contains(claim.Role)) { await _userManager.RemoveClaimAsync(user, new Claim(ClaimTypes.Role, claim.Role)); } } if (vm.Email != user.Email) { var setEmailResult = await _userManager.SetEmailAsync(user, vm.Email); if (!setEmailResult.Succeeded) { var userId = await _userManager.GetUserIdAsync(user); throw new InvalidOperationException($"Unexpected error occurred setting email for user with ID '{userId}'."); } await _userManager.SetUserNameAsync(user, vm.Email); } TempData["message"] = "U heeft succesvol de gebruiker bewerkt"; return(RedirectToAction(nameof(Index))); } return(View(nameof(CreateNewUser), vm)); }