簡體   English   中英

如何從 Firestore 導出安全和索引規則?

[英]How to export security and index rules from Firestore?

我在我的 Firestore 開發數據庫上設置了多個不同的索引。 現在,我想將它們導出到firestore.indexes.json ,這樣設置生產環境的過程會更容易。 有沒有辦法使用 Firebase CLI 導出這些索引? 這同樣適用於安全規則,盡管我知道我可以復制粘貼它們。

這是可能的!

從 Firebase 項目文件夾中的 CLI firebase firestore:indexes運行。

如果您已經設置了索引並通過 CLI 登錄到 Firebase,您將獲得一個格式化的 JSON 輸出供您復制。

例子:

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

可以使用firebase deploy --only firestore:indexes重新導入導出的firebase deploy --only firestore:indexes 檢查以下文檔摘錄。

https://firebase.google.com/docs/firestore/query-data/indexing

您還可以使用 Firebase CLI 部署索引。 首先,在您的項目目錄中運行 firebase init firestore。 在設置期間,Firebase CLI 會生成一個 JSON 文件,其中包含格式正確的默認索引。 編輯文件以添加更多索引並使用 firebase deploy 命令進行部署。 如果您只想部署索引,請添加 --only firestore:indexes 標志。 如果您使用 Firebase 控制台對索引進行編輯,請確保您還更新了本地索引文件。

如果有幫助,我正在使用 Firebase CLI 4.2.1 ,祝你好運:)

編輯:從9.6.0它仍然有效。

在您的 Firebase 項目文件夾中,在終端中執行此操作:

firebase firestore:indexes > firestore.indexes.json

它會用你的索引保存一個名為firestore.indexes.json的文件。

然后,您可以將該文件上傳到其他 Firebase 項目。

我認為目前沒有用於從項目中獲取 Firestore 安全規則的 API。 您可以通過 CLI部署規則,它也可以嵌入到自定義 Node 腳本中,並從 CI 進程調用。 但據我所知,沒有 API 可以從項目中讀取規則。

這聽起來是一個提交功能請求的好理由。

如果接受的答案對 Firestore 索引不起作用(我遇到了權限錯誤),您可以轉到 Firebase 控制台 > Cloud Firestore > 索引,然后在檢查器中打開網絡選項卡,清除所有請求並刷新頁面。 頁面加載后,您可以在網絡請求的 XHR 過濾器中找到索引的 JSON 格式響應(我通過在網絡選項卡的搜索欄中搜索“索引”一詞找到了我的)。 它應該看起來像 'indexes?key=...' 你可以復制這個 JSON 響應。

如果您已經在項目中使用firebase initfirebase init ,則只需將其粘貼到項目的 firestore.indexes.json 文件中即可。 然后將每個 name 屬性更改為 collectionGroup 屬性。 例如: 'name': 'projects/[your project name]...' to '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"
        }
      ]
    }
  ]
}

這就是我的項目文件的布局方式

myProjectFolder

  • .firebaserc
  • firebase.json
  • firestore.indexes.json
  • functions

在文件.firebaserc中,將名稱更改為您的開發項目:

{
  "projects": {
    "default": "myApp-dev"
  }
}
  • 運行命令firebase firestore:indexes > firestore.indexes.json將當前開發項目的索引導出到文件
  • .firebaserc中的項目名稱更改為myApp-prod

在文件firebase.json ,確保它指向先前導出的firestore.indexes.json的索引:

{
  "functions": [
    {
      "source": "functions",
      "codebase": "default",
      "ignore": [
        "node_modules",
        ".git",
        "firebase-debug.log",
        "firebase-debug.*.log"
      ],
      "predeploy": [
        "npm --prefix \"$RESOURCE_DIR\" run lint",
        "npm --prefix \"$RESOURCE_DIR\" run build"
      ]
    }
  ],
  "firestore": {
    "indexes": "firestore.indexes.json"
  }
}
  • 運行命令firebase deploy --only firestore:indexes

任何集成開發環境都依賴於支持 Node.js(Firebase CLI 需要)的操作系統。 因此,如果您查看 Nodes Filesystem文檔,就會有一些示例說明如何以編程方式(通過 JavaScript)操作(復制/粘貼)文件。 至於以編程方式部署到 Firebase,請參閱child_process.spawn

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM