Recipe:Mandatory Filters
- 官方来源:
examples/recipes/mandatory-filters - 核对日期:2026-05-22
这个示例解决什么问题
如何给所有查询自动附加一个强制过滤条件,即使前端没有显式传入。
官方示例的核心做法
示例在 cube.js 的 queryRewrite 中,统一追加:
Orders.createdAt afterDate 2019-12-30
然后官方还提供了两个查询示例:
- completed orders
- shipped orders
无论用户自己查哪类订单,都会额外带上这个时间下界。
这说明了什么
1. 有些过滤条件属于“系统级默认约束”
例如:
- 只允许查近两年数据;
- 默认不查冷数据;
- 默认排除历史废弃记录。
2. 这类逻辑适合放在统一改写层,而不是散落在每个前端页面
因为一旦写在页面里,就很容易漏掉。
3. Mandatory filters 也是性能治理手段
除了安全与业务口径,它还能控制:
- 查询时间范围;
- 大表扫描;
- 冷数据访问成本。
适合迁移的业务场景
- 默认只查近 90 天订单;
- 默认排除逻辑删除数据;
- 默认限制到活跃租户;
- 默认只查已归档前某个时间窗内的数据。
注意点
- 必填过滤最好在文档中明确告诉使用者;
- 否则用户会误以为“Cube 查少了数据”;
- 如果过滤过于隐蔽,会增加排障难度。
和教程哪章搭配最好
一句话总结
这个 recipe 的核心价值是:把系统级过滤条件前置到语义层,让所有消费端在默认情况下都遵守相同边界。