public async Task <IActionResult> ManageClaims(UserCliamsViewModel model) { var user = await Usermanager.FindByIdAsync(model.userId); if (user == null) { ViewBag.ErrorMessage = $"User with Id = {model.userId} cannot be found"; return(View("NotFound")); } // Get all the user existing claims and delete them var claims = await Usermanager.GetClaimsAsync(user); var result = await Usermanager.RemoveClaimsAsync(user, claims); if (!result.Succeeded) { ModelState.AddModelError("", "Cannot remove user existing claims"); return(View(model)); } // Add all the claims that are selected on the UI result = await Usermanager.AddClaimsAsync(user, model.Claims.Select(c => new Claim(c.ClaimType, c.IsSelected ? "true" : "false"))); if (!result.Succeeded) { ModelState.AddModelError("", "Cannot add selected claims to user"); return(View(model)); } return(RedirectToAction("EditUser", new { id = model.userId })); }
public async Task <IActionResult> ManageClaims(string userId) { var user = await Usermanager.FindByIdAsync(userId); if (user == null) { ViewBag.ErrorMessage = $"User with Id = {userId} cannot be found"; return(View("NotFound")); } var model = new UserCliamsViewModel() { userId = userId }; var existingUserClaims = await Usermanager.GetClaimsAsync(user); foreach (Claim claim in ClaimStore.claimstore) { UserClaims userclaim = new UserClaims() { ClaimType = claim.Type, Value = claim.Value }; // If the user has the claim, set IsSelected property to true, so the checkbox // next to the claim is checked on the UI if (existingUserClaims.Any(c => c.Type == claim.Type && c.Value == "true")) { userclaim.IsSelected = true; } model.Claims.Add(userclaim); } return(View(model)); }