public async Task <List <ValidationResult> > UpdateUserPermissions(UserPermissionActionViewModel model) { if (model.UserId == Guid.Empty) { results.Add(new ValidationResult("Invalid User Id")); return(results); } var user = await _userManager.FindByIdAsync(model.UserId.ToString()); if (user == null) { results.Add(new ValidationResult("User not found")); return(results); } var claims = await _userManager.GetClaimsAsync(user); // get user claims var claimsToAdd = new List <Claim>(); foreach (var i in model.Permissions) { var perm = EnumHelper.Parse <Permission>(i); if (perm == 0) { results.Add(new ValidationResult($"Permission {i} does not exist")); return(results); } var claim = new Claim(perm.ToString(), Convert.ToInt32(perm).ToString()); if (claims.Any(t => t.Type == claim.Type)) { continue; } claimsToAdd.Add(claim); } //var rmvClaims = await _userManager.RemoveClaimsAsync(user, claims); //if (!rmvClaims.Succeeded) //{ // results.Add(new ValidationResult(rmvClaims.Errors.FirstOrDefault().Description)); // return results; //} var addClaim = await _userManager.AddClaimsAsync(user, claimsToAdd); if (!addClaim.Succeeded) { results.Add(new ValidationResult(addClaim.Errors.FirstOrDefault().Description)); return(results); } return(results); }
public async Task <List <ValidationResult> > RemovePermissionFromUser(UserPermissionActionViewModel model) { if (model.UserId == Guid.Empty) { results.Add(new ValidationResult("Invalid User Id")); return(results); } var user = await _userManager.FindByIdAsync(model.UserId.ToString()); if (user == null) { results.Add(new ValidationResult("User not found")); return(results); } var claims = await _userManager.GetClaimsAsync(user); var claimsToRmv = new List <Claim>(); foreach (var i in model.Permissions) { var perm = EnumHelper.Parse <Permission>(i); if (perm == 0) { results.Add(new ValidationResult($"Permission {i} does not exist")); return(results); } claimsToRmv.Add(new Claim(perm.ToString(), Convert.ToInt32(perm).ToString())); } var removesClaim = await _userManager.RemoveClaimsAsync(user, claimsToRmv); if (!removesClaim.Succeeded) { results.Add(new ValidationResult(removesClaim.Errors.FirstOrDefault().Description)); return(results); } return(results); }