默认情况下,firestore安全规则是否提供对文档的访问权限?

时间:2018-12-31 03:49:55

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

我正在尝试为基于Firestore的应用编写安全规则,但对于是否默认访问Firestore中的文档/馆藏感到困惑(这意味着我需要编写规则专门禁止 >在我应限制访问的情况下访问任何文档)或如果不是默认访问文件的权限(这意味着我需要编写规则以明确允许访问)访问)?

我从firestore documentation读到:

  

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

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

任何澄清将不胜感激!

2 个答案:

答案 0 :(得分:1)

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

第一个match语句是强制性/databases/{database}/模式,在语法上,您必须在match子句中声明至少1个allow语句。因此,默认情况下,锁定的数据库将如下所示:

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

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

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

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

enter image description here

答案 1 :(得分:0)

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

您必须在某个时候允许访问文档,以便移动客户端访问它。完成此操作后,您将无法以任何其他条件拒绝对同一文档的任何其他访问规则。

因此,一般规则是:默认情况下,用户无法访问任何内容,但是一旦他们具有允许访问的任何规则,就不能再被其他规则拒绝。