有了 Cloud Firestore Security Rules,您就能專心打造出色的使用者體驗,不必管理基礎架構或編寫伺服器端驗證和授權程式碼。
安全性規則可提供簡單易懂的存取權控管和資料驗證機制。如要建構以使用者和角色為基礎的存取權系統,以保護使用者資料的安全,您必須搭配使用 Cloud Firestore Security Rules 和 Firebase 驗證服務。
安全性規則第 2 版
自 2019 年 5 月起,Cloud Firestore 安全性規則的 2 版現已推出。規則第 2 版會變更遞迴萬用字元 {name=**}
的行為。如果您打算使用集合群組查詢,就必須使用第 2 版。您必須將 rules_version = '2';
設為安全性規則的第一行,才能選擇採用第 2 版:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
編寫規則
您將根據專案中預設資料庫和其他額外資料庫所建立的資料模型,編寫及管理 Cloud Firestore Security Rules。
所有 Cloud Firestore Security Rules 都包含 match
陳述式,用於識別資料庫中的文件,以及 allow
運算式,用於控管這些文件的存取權:
service cloud.firestore {
match /databases/{database}/documents {
match /<some_path>/ {
allow read, write: if <some_condition>;
}
}
}
系統會根據您的安全性規則,評估 Cloud Firestore 行動/網頁用戶端程式庫提出的每項資料庫要求,然後再讀取或寫入任何資料。如果規則拒絕存取任何指定文件路徑,整個要求就會失敗。
以下列舉幾個基本規則組合的範例。雖然這些規則有效,但不建議用於正式版應用程式:
需要驗證
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
全部拒絕
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
全部允許
// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
上述範例使用的 {document=**}
路徑與整個資料庫中的任何文件相符。請繼續參閱這份指南,瞭解如何比對特定資料路徑並處理階層式資料。
測試規則
Cloud Firestore 提供規則模擬器,可用於測試規則集。您可以在 Firebase 控制台的 Cloud Firestore 區段中,從「Rules」分頁存取模擬工具。
規則模擬器可讓您模擬已驗證和未驗證的讀取、寫入和刪除作業。模擬已驗證的要求時,您可以建構及預覽不同供應商提供的驗證權杖。模擬要求會根據編輯器中的規則集執行,而非目前部署的規則集。
部署規則
您必須先部署安全性規則,才能開始在行動應用程式中使用 Cloud Firestore。您可以透過 Firebase CLI、Firebase CLI 或 Cloud Firestore Management REST API 部署規則。
對 Cloud Firestore Security Rules 的更新最多可能需要一分鐘才會影響新的查詢和事件監聽器。不過,變更內容最多可能需要 10 分鐘才會全面生效,並影響所有有效的事件監聽器。
使用 Firebase 控制台
如要設定及部署專案中預設資料庫的第一組規則,請在 Firebase 主控台的 Cloud Firestore 區段中,開啟「規則」分頁標籤。
在線上編輯器中編寫規則,然後按一下「發布」。
使用 Firebase CLI
您也可以使用 Firebase CLI 部署規則。使用 CLI 可讓您以應用程式的程式碼控管規則版本,並部署規則做為現有部署程序的一部分。
// Set up Firestore in your project directory, creates a .rules file
firebase init firestore
// Edit the generated .rules file to your desired security rules
// ...
// Deploy rules for all configured databases
firebase deploy --only firestore
強化 Cloud Storage 的安全性
您的應用程式將可享用 Cloud Firestore 的強大資料庫功能,以及 Cloud Storage 的檔案儲存和管理功能。由於 Cloud Firestore 可擷取 Firebase 安全性規則可用於這兩項產品的授權要求,因此這兩項產品搭配使用時,也能強化應用程式安全性。詳情請參閱 Cloud Storage 指南。