繁体   English   中英

用于检查列表中员工姓名的 Rego 规则

[英]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

(游乐场链接: https://play.openpolicyagent.org/p/5KfXnSIkHa

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM