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);
        }
Ejemplo n.º 2
0
        protected override Task Execute(AuditLogArguments parameters, IEnforcerLogger evaluationLogger)
        {
            Invocations.Add(parameters);

            return(Task.CompletedTask);
        }
Ejemplo n.º 3
0
 public override Task Execute(IEnumerable <PolicyAttributeValue> parameters, IEnforcerLogger evaluationLogger)
 {
     Attributes = parameters.ToArray();
     return(Task.CompletedTask);
 }