代码之家  ›  专栏  ›  技术社区  ›  Maarten Raaijmakers

阻止FireStore规则中的重复条目不起作用

  •  0
  • Maarten Raaijmakers  · 技术社区  · 5 年前

    我正试图阻止使用谷歌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;
        }
      }
    }
    

    根据我读到的,这应该是可行的。

    enter image description here

    我做错什么了?

    1 回复  |  直到 5 年前
        1
  •  0
  •   Frank van Puffelen    5 年前

    你的规则 if request.resource.data.m != resource.data.m 说那个领域 m 只有当它与字段的当前值不同时才能写入 在同一文档中 .

    无法检查整个集合中的重复项,因为这需要CloudFireStore读取集合中的所有文档(不可缩放)。

    当前实现唯一性约束的唯一方法是在使用 作为文档ID。由于集合中的文档ID在定义上是唯一的,因此可以使用以下方法强制执行其中的规则:

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

    上面只允许创建文档,不允许更新文档。这意味着一旦有人创建了一个特定值为 ,没有人可以覆盖它。

    使用 write 规则可以是:

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

    还可以看到: