[英]Rego rule to check for employee name in a list
我是 rego 代码的新手,并编写了一条规则来检查员工姓名是否出现在批准的员工列表中。 如果没有,它应该打印出不在列表中的员工。 这是我给出的输入:
{“valid_employee_names”:{“first_name.2113690404”:“emp_Maria”、“first_name.2641279496”:“emp_Rosie”、“first_name.3921413181”:“emp_Shaun”、“first_name.588579514”:“emp_John”}、“destroy” : 错误的 }
这是rego规则:
valid_name := {i: Reason |
check_list := {["emp_John","emp_Monika","emp_Cindy","emp_Katie","emp_Kein"]}
doc = input[i]; i="valid_employee_names"
key_ids := [k | doc[k]; startswith(k, "first_name.")]
resource := {
doc[k] : doc[replace(k, ".key", ".value")] | key_ids[_] == k
}
emp_name := [m | resource[m]; startswith(m, "emp_")]
list := {x| x:=check_list[_]}
not(list[emp_name])
Reason := sprintf("Employees not on record found - %v . :: ", emp_name)
}
我总是得到相同的 output 发现没有记录在案的员工。 谁能指出我需要更正/更新的内容?
谢谢!
您发布的规则非常复杂。 如果您只需要计算一组不在批准列表中的员工姓名(我假设是input.valid_employee_names
),则首先计算一组有效姓名,然后取差值。
# valid_employee_names generates a set of valid employee (first) names from the input.
valid_employee_names := {v |
some k
v := input.valid_employee_names[k]
startswith(k, "first_name.")}
我假设要检查的名称列表是check_list
。 请注意,您已将check_list
定义为包含名称数组(表示为字符串)的集合。 没有明显需要额外的数组。 只需将check_list
定义为一组名称:
check_list := {"emp_John", "emp_Monika", "emp_Cindy", "emp_Katie", "emp_Kein"}
现在我们有两个集合,我们可以使用集合差异轻松找到无效名称:
check_list - valid_employee_names
把它们放在一起:
valid_employee_names := {v |
some k
v := input.valid_employee_names[k]
startswith(k, "first_name.")}
check_list := {"emp_John", "emp_Monika", "emp_Cindy", "emp_Katie", "emp_Kein"}
invalid_names := check_list - valid_employee_names
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.