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

Firestore安全规则:如何拒绝访问匹配多规则的--stats--文档?

Firestore安全规则:处理多match匹配下的特定文档访问限制

问题描述

我当前使用的Firestore安全规则如下:

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /users {
      match /{userId} {
        allow get: if true;
        allow list: if isQueryLimitRespected(20);
        allow write: if false;
      }

      match /--stats-- {
        allow read, write: if false;
      }
    }
  }
}

根据Firestore官方文档说明:

一个文档可能匹配多个match语句。当多个allow表达式匹配请求时,只要任一条件为true就允许访问。

由于--stats--文档同时匹配了/users/{userId}和/users/--stats--两条规则,当前无法拒绝该文档的访问,请问该如何实现?是否无法做到?

解决方案

可以通过以下方式实现对--stats--文档的访问限制:

  • 修改通用规则的条件,排除特定文档
    在/users/{userId}的规则中,给允许访问的条件加上文档ID不等于--stats--的限制,这样通用规则就不会对--stats--生效,只会触发专门的规则:
    rules_version = '2';
    
    service cloud.firestore {
      match /databases/{database}/documents {
        match /users {
          match /{userId} {
            allow get: if userId != '--stats--';
            allow list: if isQueryLimitRespected(20);
            allow write: if false;
          }
    
          match /--stats-- {
            allow read, write: if false;
          }
        }
      }
    }
    

核心逻辑是:Firestore规则只要有一条allow条件满足就允许访问,因此必须确保没有任何规则会允许--stats--的访问。通过在通用规则中排除该文档ID,就能让专门针对--stats--的拒绝规则生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:45:34