【问题标题】:Prevent duplicate entries in Firestore rules not working防止 Firestore 规则中的重复条目不起作用
【发布时间】:2019-06-11 16:19:47
【问题描述】:

我正在尝试使用 Google Firestore 规则防止重复条目,但它不起作用。我正在尝试的规则是:

service cloud.firestore {  
  // Prevent duplicate messages
  match /databases/{database}/documents {
    match /messages/{message} {
        allow read;
      allow write: if request.resource.data.m != resource.data.m;
    }
  }
}

根据我的阅读,这应该可以。

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    您的规则if request.resource.data.m != resource.data.m 表示,只有在与字段m 在同一文档中的当前值不同时,才能写入字段m

    没有办法在安全规则中检查整个集合中的重复项,因为这需要 Cloud Firestore 读取集合中的所有文档(这在规模上会变得非常昂贵)。

    目前实现唯一性约束的唯一方法是创建一个单独的集合,在其中使用m 作为文档 ID。由于集合中的文档 ID 根据定义是唯一的,因此您可以通过以下方式强制执行该规则:

    match /unique_ms/{m} {
      allow create;
    }
    

    上面只允许创建一个文档,它不允许更新它。这意味着一旦有人创建了具有特定值m 的文档,任何人都无法覆盖它。

    使用write 规则的替代方法可能是:

    allow write: if !exists(/databases/$(database)/documents/unique_ms/{m});
    

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2023-03-07
      • 2019-01-31
      • 2019-12-14
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多