如果集合名称匹配,Firestore 允许读取

Eig*_*ice 1 firebase firebase-security google-cloud-firestore

我正在尝试在 Cloud Firestore 中实现我认为的基本安全规则,即允许对特定集合进行读取访问。

service cloud.firestore {
  match /databases/{collectionName}/documents {
      match /{document=**}{
      allow read : if collectionName=="metadata";
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,在规则游乐场中, 的 查询/metadata/status被拒绝,但是,如果我将运算符切换为,!=而不是==,它允许对任何集合进行任何查询,而不仅仅是非 的查询metadata。帮助?

Dha*_*raj 5

该通配符的位置不正确。这将是默认数据库的collectionName数据库名称,因此返回 false。尝试以下规则:(default) "(default)" == "metadata"

service cloud.firestore {
  match /databases/{database}/documents {
    match /{collectionName}/{doc}{
      allow read : if collectionName == "metadata";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这里collectionName是正在访问的集合的名称。


然而,此规则将适用于所有集合。如果您只想为“元数据”集合添加该规则,则可以为此添加单独的规则:

match /metadata/{doc} {
  allow read: if true;
}
Run Code Online (Sandbox Code Playgroud)