in src/PSRule.Rules.Azure/Data/Policy/PolicyAssignmentVisitor.cs [1257:1310]
private static JObject VisitValueExpression(PolicyAssignmentContext context, JObject condition, string s)
{
var tokens = ExpressionParser.Parse(s);
// Handle [requestContext().apiVersion]
if (tokens.ConsumeFunction(PROPERTY_REQUESTCONTEXT) &&
tokens.ConsumeGroup() &&
tokens.ConsumePropertyName(PROPERTY_APIVERSION))
{
condition.RemoveProperty(PROPERTY_VALUE);
condition.Add(PROPERTY_FIELD, PROPERTY_APIVERSION);
if (condition.TryGetProperty(PROPERTY_LESS, out var value))
{
condition.RemoveProperty(PROPERTY_LESS);
condition.Add(PROPERTY_APIVERSION, string.Concat(LESS_OPERATOR, value));
}
else if (condition.TryGetProperty(PROPERTY_LESSOREQUALS, out value))
{
condition.RemoveProperty(PROPERTY_LESSOREQUALS);
condition.Add(PROPERTY_APIVERSION, string.Concat(LESSOREQUAL_OPERATOR, value));
}
else if (condition.TryGetProperty(PROPERTY_GREATER, out value))
{
condition.RemoveProperty(PROPERTY_GREATER);
condition.Add(PROPERTY_APIVERSION, string.Concat(GREATER_OPERATOR, value));
}
else if (condition.TryGetProperty(PROPERTY_GREATEROREQUALS, out value))
{
condition.RemoveProperty(PROPERTY_GREATEROREQUALS);
condition.Add(PROPERTY_APIVERSION, string.Concat(GREATEROREQUAL_OPERATOR, value));
}
else if (condition.TryGetProperty(PROPERTY_EQUALS, out value))
{
condition.RemoveProperty(PROPERTY_EQUALS);
condition.Add(PROPERTY_APIVERSION, value);
}
}
// Handle [field('string')]
else if (tokens.HasFieldTokens() && !tokens.HasPolicyRuntimeTokens())
{
condition = VisitFieldTokens(context, condition, tokens);
}
// Handle runtime token
else if (tokens.HasPolicyRuntimeTokens())
{
var value = VisitRuntimeTokens(context, tokens);
if (value != null)
condition.ReplaceProperty(PROPERTY_VALUE, value);
}
return condition;
}