From dd0b3db4525170ec0a6f4ae7c9ccc3bda60d7597 Mon Sep 17 00:00:00 2001 From: Jakob L. Kreuze Date: Wed, 15 Nov 2023 14:59:30 -0500 Subject: Add semantics for obligation/advice expressions --- xacml-translation/match.rego | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/xacml-translation/match.rego b/xacml-translation/match.rego index a92a679..947c857 100644 --- a/xacml-translation/match.rego +++ b/xacml-translation/match.rego @@ -271,6 +271,29 @@ evaluate_expression({ "expression": "function", "function": name }) := x if { x := name } +######################################################################## +# Obligations and Advice +######################################################################## + +evaluate_attribute_assignment_expression(expr) := assignment { + { "kind": "primitive", "value": inner } = evaluate_expression(expr.expression) + assignment := { "category": expr.category, + "identifier": expr.identifier, + "issuer": expr.issuer, + "value": inner } +} + +evaluate_obligation_expression(obligation_expression) := obligation { + assignments := [evaluate_attribute_assignment_expression(expr) | expr := obligation_expression.assignments[_]] + obligation := { "assignments": assignments, "identifier": obligation_expression.identifier } +} + +evaluate_advice_expression(advice_expression) := advice { + assignments := [evaluate_attribute_assignment_expression(expr) | expr := advice_expression.assignments[_]] + advice := { "assignments": assignments, "identifier": advice_expression.identifier } +} + + ######################################################################## # Rule ######################################################################## -- cgit v1.3