OPA 屏蔽动态数组字段
OPA masking a dynamic array field
我正在尝试对作为数组一部分的输入和结果字段应用掩码。并且数组的大小是动态的。根据文档,指示提供绝对数组索引,这在此用例中是不可能的。我们还有其他选择吗?
例如。如果需要屏蔽输入文档中所有学生的年龄字段?
输入:
"students" : [
{
"name": "Student 1",
"major": "Math",
"age": "18"
},
{
"name": "Student 2",
"major": "Science",
"age": "20"
},
{
"name": "Student 3",
"major": "Entrepreneurship",
"age": "25"
}
]
如果您只想生成从 input
中删除了一个字段(或一组字段)的 input
的副本,您可以使用 json.remove
。诀窍是使用理解来计算要删除的路径列表。例如:
paths_to_remove := [sprintf("/students/%v/age", [x]) | some x; input.students[x]]
result := json.remove(input, paths_to_remove)
如果您尝试使用 Decision Log Masking 功能在决策日志中屏蔽 input
文档中的字段,那么您可以这样写:
package system.log
mask[x] {
some i
input.input.students[i]
x := sprintf("/input/students/%v/age", [i])
}
我正在尝试对作为数组一部分的输入和结果字段应用掩码。并且数组的大小是动态的。根据文档,指示提供绝对数组索引,这在此用例中是不可能的。我们还有其他选择吗?
例如。如果需要屏蔽输入文档中所有学生的年龄字段?
输入:
"students" : [
{
"name": "Student 1",
"major": "Math",
"age": "18"
},
{
"name": "Student 2",
"major": "Science",
"age": "20"
},
{
"name": "Student 3",
"major": "Entrepreneurship",
"age": "25"
}
]
如果您只想生成从 input
中删除了一个字段(或一组字段)的 input
的副本,您可以使用 json.remove
。诀窍是使用理解来计算要删除的路径列表。例如:
paths_to_remove := [sprintf("/students/%v/age", [x]) | some x; input.students[x]]
result := json.remove(input, paths_to_remove)
如果您尝试使用 Decision Log Masking 功能在决策日志中屏蔽 input
文档中的字段,那么您可以这样写:
package system.log
mask[x] {
some i
input.input.students[i]
x := sprintf("/input/students/%v/age", [i])
}