public async Task <List <ClaimDomain> > BuildAsync(IUser user, IEnumerable <ClaimConfiguration> claimsConfigurations) { if (user == null || user.Id <= 0 || claimsConfigurations == null || !claimsConfigurations.Any()) { return(null); } var claimDomains = new ClaimDomainDictionary(); foreach (var claimConfig in claimsConfigurations) { await BuildClaimAsync(user, claimDomains, claimConfig); } return(claimDomains.Values.ToList()); }
internal async Task BuildClaimAsync(IUser user, ClaimDomainDictionary claimDomains, ClaimConfiguration claimConfig) { var domainName = string.IsNullOrWhiteSpace(claimConfig.Domain) ? claimConfig.Entity : claimConfig.Domain; var domain = claimDomains[domainName]; if (claimConfig.Entity == "User") { var value = user.GetPropertyValue(claimConfig.EntityProperty).ToString(); domain.Claims.Add(new Claim { Name = claimConfig.Name, Value = value }); } else { var claims = await BuildClaimFromEntityAsync(user, claimConfig); if (claims != null && claims.Any()) { domain.Claims.AddRange(claims); } } }