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

配置Firestore安全规则限制查询时间跨度不超过31天

Firestore安全规则:限制查询时间范围不超过31天

我来帮你搞定这个Firestore安全规则的需求~咱们的目标是给timesheets集合的查询加上限制,确保查询的start_from和start_to之间的时间差不超过31天。Firestore的安全规则可以直接读取查询的约束条件,咱们就利用这一点来做校验。

完整的安全规则代码

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /timesheets/{timesheet} {
      // 单个文档获取可根据业务需求调整规则,这里先示例禁用
      allow get: if false; 
      // 限制列表查询的时间范围差不超过31天
      allow list: if 
        // 确保查询同时包含start_time的上下限条件
        request.query.where('start_time', '>', null) != null &&
        request.query.where('start_time', '<', null) != null &&
        // 计算时间差(31天=31*24*60*60*1000=2678400000毫秒)
        (request.query.where('start_time', '<').value - request.query.where('start_time', '>').value) <= 2678400000;
    }
  }
}

关键细节说明

  • 校验查询条件完整性:先确保查询同时包含start_time > start_from和start_time < start_to两个约束,避免无限制的全集合遍历查询。
  • 时间差计算逻辑:Firestore中的时间类型在规则里会被转换为毫秒级时间戳,直接用两个条件的时间值相减,和31天对应的毫秒数对比即可。
  • 权限区分:allow list对应你代码里的get()查询(因为该方法返回的是查询结果列表),如果需要允许单个文档的获取操作,可以单独调整allow get的规则,比如结合用户身份校验等业务逻辑。

测试提示

当你尝试执行时间差超过31天的查询时,Firestore会直接返回权限拒绝的错误;只有时间差≤31天的查询才能正常获取数据,刚好满足咱们的限制需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:12:45