internal async Task <List <Claim> > BuildClaimFromEntityAsync(IUser user, ClaimConfiguration claimConfig) { var entities = await GetEntities(claimConfig.Entity, claimConfig.EntityIdProperty, user.GetPropertyValue(claimConfig.RelatedEntityIdProperty, "Id").ToString()); if (entities == null || !entities.Any()) { return(null); } var claims = new List <Claim>(); foreach (var entity in entities) { var jobject = JObject.Parse(entity.Object.ToString()); var value = jobject[claimConfig.EntityProperty]?.ToObject <string>(); claims.Add(new Claim { Name = claimConfig.Name, Value = value }); } return(claims); }
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); } } }