【问题标题】:Firestore create security rule not behaving as expectedFirestore 创建的安全规则未按预期运行
【发布时间】:2019-07-28 19:47:40
【问题描述】:

我使用具有作业 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

【问题讨论】:

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

标签: google-cloud-firestore firebase-security


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    相关资源
    最近更新 更多