[英]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 init
了firebase 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.