防止 Firestore 规则中的重复条目不起作用
Posted
技术标签:
【中文标题】防止 Firestore 规则中的重复条目不起作用【英文标题】:Prevent duplicate entries in Firestore rules not working 【发布时间】: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;
根据我的阅读,这应该可以。
我做错了什么?
【问题讨论】:
【参考方案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);
另见:
Cloud Firestore: Enforcing Unique User Names firebase rule for unique property in firestore【讨论】:
以上是关于防止 Firestore 规则中的重复条目不起作用的主要内容,如果未能解决你的问题,请参考以下文章
NativeQuery 删除重复的 Oracle SQL Db 表条目不起作用(参见代码)
当我在 firestore 中的 updateData 比 updateData 功能不起作用时?