Skip to content

Recipe:Mandatory Filters

  • 官方来源:examples/recipes/mandatory-filters
  • 核对日期:2026-05-22

这个示例解决什么问题

如何给所有查询自动附加一个强制过滤条件,即使前端没有显式传入。

官方示例的核心做法

示例在 cube.jsqueryRewrite 中,统一追加:

  • Orders.createdAt afterDate 2019-12-30

然后官方还提供了两个查询示例:

  • completed orders
  • shipped orders

无论用户自己查哪类订单,都会额外带上这个时间下界。

这说明了什么

1. 有些过滤条件属于“系统级默认约束”

例如:

  • 只允许查近两年数据;
  • 默认不查冷数据;
  • 默认排除历史废弃记录。

2. 这类逻辑适合放在统一改写层,而不是散落在每个前端页面

因为一旦写在页面里,就很容易漏掉。

3. Mandatory filters 也是性能治理手段

除了安全与业务口径,它还能控制:

  • 查询时间范围;
  • 大表扫描;
  • 冷数据访问成本。

适合迁移的业务场景

  • 默认只查近 90 天订单;
  • 默认排除逻辑删除数据;
  • 默认限制到活跃租户;
  • 默认只查已归档前某个时间窗内的数据。

注意点

  • 必填过滤最好在文档中明确告诉使用者;
  • 否则用户会误以为“Cube 查少了数据”;
  • 如果过滤过于隐蔽,会增加排障难度。

和教程哪章搭配最好

一句话总结

这个 recipe 的核心价值是:把系统级过滤条件前置到语义层,让所有消费端在默认情况下都遵守相同边界。

本站基于官方文档与官方代码仓库整理,为第三方非官方中文教程,与 Cube Dev, Inc. 无隶属、授权或背书关系;Cube、Cube Core 及相关标识归其各自权利人所有。