【问题标题】:Firestore allow read if collection name matches如果集合名称匹配,Firestore 允许读取
【发布时间】:2021-10-21 12:58:16
【问题描述】:

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

service cloud.firestore {
  match /databases/{collectionName}/documents {
      match /{document=**}{
      allow read : if collectionName=="metadata";
      }
  }
}

所以在规则游乐场中,/metadata/status 的查询被拒绝,但是,如果我将运算符切换到 != 而不是 ==,它允许对任何集合进行任何查询,而不仅仅是那些不是tmetadata。帮忙?

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-security


    【解决方案1】:

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

    service cloud.firestore {
      match /databases/{database}/documents {
        match /{collectionName}/{doc}{
          allow read : if collectionName == "metadata";
        }
      }
    }
    

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


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

    match /metadata/{doc} {
      allow read: if true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多