public async Task OnGetAsync(string id) { Input = new EditInputMdl { Id = id }; var role = await _roleManager.FindByIdAsync(id); Input.Name = role.Name; var claimsTypes = (await _roleManager.GetClaimsAsync(role)).Select(c => c.Type.Replace('.', '_')).ToArray(); var permitItems = string.Join(';', claimsTypes); Input.LoadPermitList(permitItems); }
public async Task <IActionResult> Edit(string id) { var model = new EditInputMdl { Id = id }; var role = await _roleManager.FindByIdAsync(id); model.Name = role.Name; var claimsTypes = (await _roleManager.GetClaimsAsync(role)).Select(c => c.Type.Replace('.', '_')).ToArray(); var permitItems = string.Join(';', claimsTypes); model.LoadPermitList(permitItems); return(View(model)); }
public async Task <IActionResult> Edit(EditInputMdl model) { var selectedPermits = model.SelectedPermits.Split(new char[] { ';' }).Select(p => p.Replace('_', '.')); var role = await _roleManager.FindByIdAsync(model.Id); var currentClaims = await _roleManager.GetClaimsAsync(role); var removeClaims = currentClaims.Where(c => !selectedPermits.Contains(c.Type)); foreach (var claim in removeClaims) { var result = await _roleManager.RemoveClaimAsync(role, claim); if (!result.Succeeded) { foreach (var error in result.Errors) { ModelState.AddModelError("", error.Description); } } } var currentPermits = currentClaims.Select(c => c.Type); var addPermits = selectedPermits.Except(currentPermits); foreach (var permit in addPermits) { var result = await _roleManager.AddClaimAsync(role, new Claim( permit, "" )); if (!result.Succeeded) { foreach (var error in result.Errors) { ModelState.AddModelError("", error.Description); } } } if (!ModelState.IsValid) { return(View()); } return(RedirectToAction("Index")); }