Google cloud firestore Firestore创建安全规则的行为不符合预期

Google cloud firestore Firestore创建安全规则的行为不符合预期,google-cloud-firestore,firebase-security,Google Cloud Firestore,Firebase Security,我创建了一个作业集合,其中的作业文档具有作业id(XAXhAJh71hHbe1fY7blZ),并添加了以下安全规则: match /{document=**} { allow read, write: if false; } match /jobs/{jobId} { allow create: if request.auth.uid != null; } 根据create“适用于对不存在文档的写入”。 即,如果文档存在,则应拒绝此操作 但是Firestore模拟器允许在

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

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

match /jobs/{jobId} {  
    allow create: if request.auth.uid != null;
}
根据create“适用于对不存在文档的写入”。 即,如果文档存在,则应拒绝此操作

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


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

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


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

您的完整创建路径是什么?类似于“/jobs/O7QCmibazkIBBMgFH1hl/documents/…”的内容,您可以看到屏幕截图链接。路径是/jobs/XAXhAJh71hHbe1fY7blZ,它在该对象上创建一个数据对象,即使该文档已经存在(违反安全规则)