【问题标题】:Do firestore security rules provide access to documents by default?Firestore 安全规则是否默认提供对文档的访问权限?
【发布时间】:2019-05-27 17:57:15
【问题描述】:

我正在尝试为我的基于 Firestore 的应用程序编写安全规则,但我对访问 Firestore 中的文档/集合是否是默认设置感到困惑(这意味着我需要编写规则来专门禁止 在我应该限制访问的情况下访问任何文档)或者如果对文档的访问不是默认设置(这意味着我需要编写规则来专门允许在我想要启用的情况下访问访问)?

firestore documentation我读到这个:

在读取或写入任何数据之前,都会根据您的安全规则评估来自 Cloud Firestore 移动/网络客户端库的每个数据库请求。如果规则拒绝访问任何指定的文档路径,则整个请求都会失败。

由此看来,默认情况下似乎所有文档都可以访问,但我不确定并想问。

任何澄清将不胜感激! ????

【问题讨论】:

  • AFAIK 默认情况下无法访问集合和文档。当您选择在项目中使用 firestore 作为数据库时,它允许您选择 2 种安全规则模式,即 Start in locked mode, Make your database private by denying all reads and writes 和另一个 Start in test mode, Get set up quickly by allowing all reads and writes to your database。通过选择其中任何一种模式,您最终将设置安全规则。

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


【解决方案1】:

如果没有任何规则明确授予,访问将被拒绝。这意味着无法访问与任何显式声明的路径或通配符模式不匹配的集合。

第一个match 语句是强制的/databases/{database}/ 模式,从语法上讲,您必须在匹配子句中声明至少1 个allow 语句。所以默认情况下,一个锁定的数据库会是这样的

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

因为省略 if false 将授予对所有内容的访问权限。

当您开始为集合声明特定规则时,您将隐式拒绝对未明确授予访问权限的集合和路径模式的访问。

确认这一点的最简单方法是使用内置的rules simulator in Firebase console 对其进行测试。

【讨论】:

  • 很好的答案丹尼斯!
【解决方案2】:

您可以在控制台模拟器中轻松地自行测试。调整规则,以便仅以某种方式保护某个集合,然后尝试在其他任何地方模拟任何访问。所有的读写都将被拒绝。

您必须在某个时候允许访问文档,移动客户端才能访问它。一旦你这样做了,你就不能在任何其他条件下拒绝对同一访问的任何其他规则的对该文档的访问。

所以一般规则是:用户默认不能访问任何东西,但是一旦他们有任何允许访问的规则,就不能再次被其他规则拒绝。

【讨论】:

    猜你喜欢
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2020-08-26
    • 2020-03-22
    • 2018-07-07
    • 2021-07-17
    • 1970-01-01
    相关资源
    最近更新 更多