我们可以允许用户使用Firestore安全规则创建仅具有特定字段的数据吗?

时间:2020-04-08 14:07:40

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

提交数据时,我想确保我的客户不能保留随机字段。

同时,我想让我的应用程序尽可能简单,并且我尝试仅使用Firestore规则和/或索引(即不使用某些服务器端Express)来做到这一点。有可能吗?

我知道如何检查字段的存在和类型:

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /example/{exampleId} {
      allow create: if "fieldOK" in request.resource.data &&
        request.resource.data.fieldOK is string
    }
  }
}

但是当您无法在规则中循环时,我不知道如何阻止创建诸如“ fieldBS”之类的随机字段。

1 个答案:

答案 0 :(得分:1)

是的,您可以使用hasAllhasOnly确保对象只有一定范围的键。

request.resource.data.keys().hasAll(['admin']);
request.resource.data.keys().hasOnly(['admin']);

您可以在Map(键/值对)样式数据的任意嵌套级别使用此功能。

Firebase Rules Reference是解决此类问题的好资源。

仅检查了受支持的键范围后,此后对每个字段进行完整性检查仍然很重要。