Firestore创建的安全规则不符合预期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firestore创建的安全规则不符合预期相关的知识,希望对你有一定的参考价值。

我创建了一个作业集合,其中包含一个具有作业ID(XAXhAJh71hHbe1fY7blZ)的作业文档,并添加了以下安全规则:

match /{document=**} {
    allow read, write: if false;
}

match /jobs/{jobId} {  
    allow create: if request.auth.uid != null;
}

根据docs创建“适用于写入不存在的文档”。即,如果文件存在,则应拒绝此操作。

但是,Firestore模拟器允许创建现有文档ID。即,即使文档存在于数据库中,模拟器也允许在/ jobs / XAXhAJh71hHbe1fY7blZ上执行create。

Firestore simulator screenshot

答案

你误解了创造的定义。你的第二句话不正确:

根据文档创建“适用于写入不存在的文档”。即,如果文件存在,则应拒绝此操作。

如果文档已存在,则创建规则不会拒绝任何内容。如果文档已存在并正在更新,则创建规则根本不适用。相反,任何更新或写入规则都将适用。如果没有匹配的更新或写入规则允许访问文档,则更新将被拒绝。

以上是关于Firestore创建的安全规则不符合预期的主要内容,如果未能解决你的问题,请参考以下文章

每个文档颤动的 Firebase-firestore 安全规则

在 Firestore 安全规则“列表”操作中使用变量

用于在用户之间共享数据的 Firestore 安全规则

Firestore:删除文档和安全规则

我应该如何构建我的 Firestore 安全规则?

如何为使用 Cloud Firestore 的 Flutter 应用设置安全规则?