public async ValueTask <AttributeValueResult <T> > GetValue <T>(PolicyAttribute attribute, IAttributeResolver attributeResolver, IEnforcerLogger evaluationLogger) { if (attribute == null) { throw new ArgumentNullException(nameof(attribute)); } if (attribute.RuntimeType != typeof(T)) { evaluationLogger.LogError( $"{GetType().Name}: Requested attribute {attribute} does not match type requested {typeof(T).Name}"); throw new ArgumentException("Requested attribute does not match type requested", nameof(attribute)); } // Iterate through value providers and aggregate their results var sensitivity = PolicyAttributeSensitivity.NonSensitive; var values = Enumerable.Empty <T>(); var foundValues = false; foreach (var provider in _valueProviders) { var valueResult = await provider.GetValue <T>(attribute, attributeResolver, evaluationLogger); sensitivity = MostSensitive(sensitivity, valueResult.Sensitivity); if (valueResult.HasValues) { values = values.Concat(valueResult.Values); foundValues = true; } } return(foundValues ? new AttributeValueResult <T>(values.ToArray(), sensitivity) : AttributeValueResult <T> .CacheableEmpty); }
protected override Task Execute(AuditLogArguments parameters, IEnforcerLogger evaluationLogger) { Invocations.Add(parameters); return(Task.CompletedTask); }
public override Task Execute(IEnumerable <PolicyAttributeValue> parameters, IEnforcerLogger evaluationLogger) { Attributes = parameters.ToArray(); return(Task.CompletedTask); }