如何从Firestore导出安全性和索引规则?

时间:2018-10-12 11:25:46

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

我在Firestore开发数据库上设置了多个不同的索引。现在,我想将它们导出到firestore.indexes.json中,以便更轻松地设置产品环境。有没有办法使用Firebase CLI导出这些索引?安全规则也是如此,尽管我知道我可以复制粘贴它们。

4 个答案:

答案 0 :(得分:11)

有可能!

从Firebase项目文件夹中的CLI firebase firestore:indexes运行。

如果您已经设置了索引并通过CLI登录到Firebase,您将获得格式化的JSON输出供您复制。

示例:

{
  "indexes": [
    {
      "collectionId": "teslaData",
      "fields": [
        {
          "fieldPath": "Model",
          "mode": "ASCENDING"
        },
        {
          "fieldPath": "Price",
          "mode": "ASCENDING"
        }
      ]
    }
  ]
}

我正在使用Firebase CLI 4.2.1,如果有帮助,祝您好运:)

答案 1 :(得分:2)

我认为目前没有用于从项目中获取Firestore安全规则的API。您可以deploy rules through the CLI,也可以将其嵌入自定义节点脚本中,并从CI流程中调用。但是据我所知,没有API可以从项目中读取规则。

听起来file a feature request是一个很好的理由。

答案 2 :(得分:0)

如果接受的答案对 Firestore 索引不起作用(我遇到了权限错误),您可以转到 Firebase 控制台 > Cloud Firestore > 索引,然后在检查器中打开网络选项卡,清除所有请求并刷新这一页。页面加载后,您可以在网络请求的 XHR 过滤器中找到索引的 JSON 格式响应(我通过在网络选项卡的搜索栏中搜索“索引”一词找到了我的)。它应该看起来像 'indexes?key=...' 你可以复制这个 JSON 响应。

如果您已经使用 firebase init 在您的项目中初始化了 firebase,您只需将其粘贴到您项目的 firestore.indexes.json 文件中即可。 然后将每个 name 属性更改为 collectionGroup 属性。例如:'name': 'projects/[your project name]...''collectionGroup': '[name of collection for this index]'

运行 firebase deploy --only firestore:indexes 将在文本编辑器中所做的任何更改更新回 Firestore 索引选项卡

对于 Firestore 安全规则,以一种不太复杂但类似的方式,您可以将 firebase 控制台中显示的规则复制并粘贴到您项目的 firestore.rules 文件中。

示例 firestore.indexes.json 文件

{
  "indexes": [
    {
      "collectionGroup": "faq",
      "queryScope": "COLLECTION",
      "fields": [
        {
          "fieldPath": "searchKeywords",
          "arrayConfig": "CONTAINS"
        },
        {
          "fieldPath": "answered",
          "order": "ASCENDING"
        },
        {
          "fieldPath": "relevanceScore",
          "order": "ASCENDING"
        },
        {
          "fieldPath": "__name__",
          "order": "ASCENDING"
        }
      ]
    }
  ]
}

答案 3 :(得分:-1)

任何集成开发环境都基于支持Node.js的操作系统(Firebase CLI要求)。因此,如果您查看Nodes Filesystem文档,就会有一些示例,说明如何以编程方式(通过JavaScript)操作(复制/粘贴)文件。至于以编程方式部署到Firebase,请参见child_process.spawn