有了 Cloud Firestore Security Rules,您就能專心打造出色的使用者體驗,不必管理基礎架構或編寫伺服器端驗證和授權程式碼。
安全性規則可提供簡單易懂的存取權控管和資料驗證機制。如要建構以使用者為基礎的角色式存取系統,保護使用者資料的安全,您需要搭配使用 Firebase 驗證與 Cloud Firestore Security Rules。
安全性規則第 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 部分,在「規則」分頁標籤中存取模擬器。
規則模擬器可讓您模擬已驗證和未驗證的讀取、寫入和刪除作業。模擬經過驗證的要求時,您可以建立及預覽來自不同提供者的驗證權杖。模擬要求會根據編輯器中的規則集執行,而非目前部署的規則集。
部署規則
您必須先部署安全性規則,才能開始在行動應用程式中使用 Cloud Firestore。您可以在 Firebase 控制台中使用 Firebase CLI 或 Cloud Firestore 管理 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 指南。