You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OPA Rego实现任务标签与用户标签的全匹配过滤?

问题:筛选用户标签完全覆盖任务标签的任务

我有两类数据:

  • 带有“必须匹配”标签的任务列表
  • 带有标签的用户

需求是筛选出所有任务标签均与用户标签匹配的任务(用户可以拥有额外标签,只要任务的每一个标签键值对都能在用户标签中找到对应匹配即可)。

输入数据

rego-input(用户数据)

{
  "user":"user-1",
  "tags":{"loc":"NY","type":"L1","group":"admin"}
}

rego-data(任务数据)

{
  "proj":"abc1",
  "tasks":[
    {"tags":{"loc":"NJ","type":"L1"},"title":"task-1"},
    {"tags":{"loc":"NY","type":"L1"},"title":"task-2"},
    {"tags":{"loc":"PA","type":"L2"},"title":"task-3"}]
}

预期输出

{
  "user":"user-1",
  "tasks":[
    {"tags":{"loc":"NY","type":"L1"},"title":"task-2"}
  ]
}

实现的Rego代码

package example

import input as user
import data as project

# 筛选符合标签匹配要求的任务
allow_task[task] {
    task := project.tasks[_]
    # 验证任务的所有标签键值对都能在用户标签中找到完全匹配
    all k, v in task.tags {
        user.tags[k] == v
    }
}

# 组装最终输出结构
output := {
    "user": user.user,
    "tasks": allow_task
}

代码说明

  1. allow_task[task]规则负责筛选任务:
    • 遍历所有任务project.tasks[_]
    • 通过all k, v in task.tags遍历任务的每一组标签,确保用户标签中存在相同键且对应值完全一致
  2. 最终输出将用户名和筛选后的任务列表组合成预期格式

内容的提问来源于stack exchange,提问作者sriba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:11:14