public Task AddClaimsAsync(IdentityUserViewModel viewModel, IEnumerable <System.Security.Claims.Claim> claims, CancellationToken cancellationToken) { if (viewModel == null) { throw new ArgumentNullException("user"); } if (claims == null) { throw new ArgumentNullException("claim"); } var model = unitOfWork.UserRepository.FindById(viewModel.Id); if (model == null) { throw new ArgumentException("IdentityUserViewModel does not correspond to a User entity.", "user"); } foreach (var claim in claims) { var claimEntityModel = new EntityModels.Identity.Claim { ClaimType = claim.Type, ClaimValue = claim.Value, User = model }; model.Claims.Add(claimEntityModel); } unitOfWork.UserRepository.Update(model); return(unitOfWork.CommitAsync()); }
public Task ReplaceClaimAsync(IdentityUserViewModel viewModel, System.Security.Claims.Claim claim, System.Security.Claims.Claim newClaim, CancellationToken cancellationToken) { if (viewModel == null) { throw new ArgumentNullException("user"); } if (claim == null || newClaim == null) { throw new ArgumentNullException("claim"); } var model = unitOfWork.UserRepository.FindById(viewModel.Id); if (model == null) { throw new ArgumentException("IdentityUserViewModel does not correspond to a User entity.", "user"); } var claimEntityModel = new EntityModels.Identity.Claim { ClaimType = newClaim.Type, ClaimValue = newClaim.Value, User = model }; var existingClaims = model.Claims.Where(o => o.ClaimType == claim.Type && o.ClaimValue == claim.Value).ToList(); if (existingClaims != null && existingClaims.Count > 0) { foreach (var oldClaim in existingClaims) { model.Claims.Remove(oldClaim); } } model.Claims.Add(claimEntityModel); unitOfWork.UserRepository.Update(model); return(unitOfWork.CommitAsync()); }