Firestore创建安全规则的行为异常

时间:2019-03-07 02:21:47

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

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

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

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

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

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

Firestore simulator screenshot

1 个答案:

答案 0 :(得分:1)

您误解了create的定义。您的第二句话不正确:

  

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

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