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

如何在Firestore安全规则中检查Reference的相等性?

Firestore安全规则中检查引用相等性的正确方法

在Firestore安全规则里可以检查引用的相等性,你之前的问题出在试图用字符串路径和引用类型直接比较——这两种是完全不同的数据类型,哪怕路径内容一致,结果也永远是false。下面是正确的实现方式:

核心思路

不要用硬编码的路径字符串,而是用Firestore规则内置的API构建和members数组中类型一致的引用对象,再进行比较或数组包含检查。

具体实现示例

假设你需要验证当前用户是否是某个letterbox文档的成员,规则可以这么写:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /letterbox/{letterboxId} {
      // 检查当前用户的引用是否存在于members数组中
      allow read, write: if resource.data.members.hasAny([
        database.collection('users').doc(request.auth.uid)
      ]);
    }
  }
}

关键细节说明

  1. 引用类型匹配:database.collection('users').doc(request.auth.uid)生成的是规则中的引用类型,和你存储在members数组里的Firestore引用类型完全一致,这样用hasAny()就能正确匹配。
  2. 单个引用相等性检查:如果需要验证数组中某个特定位置的引用,直接用引用类型比较即可,比如:
    allow read: if resource.data.members[0] == database.collection('users').doc(request.auth.uid);
    
  3. 测试平台注意事项:在规则测试平台中,记得开启「Authenticated」模拟,填入对应的用户UID,同时确保测试用的letterbox文档的members数组中确实包含该UID对应的用户文档引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:52:37