Cloud Firestore 安全規則入門

透過 Cloud Firestore 安全性規則,您可以專注於建立出色的使用者體驗,而無需管理基礎架構或編寫伺服器端身份驗證和授權程式碼。

安全規則以簡單而富有表現力的格式提供存取控制和資料驗證。要建立基於使用者和基於角色的存取系統來確保使用者資料的安全,您需要結合使用Firebase 驗證和 Cloud Firestore 安全規則。

安全規則版本 2

截至 2019 年 5 月,Cloud Firestore 安全規則第 2 版現已推出。規則的版本 2 改變了遞歸通配符{name=**}的行為。如果您打算使用集合組查詢,則必須使用版本 2。您必須透過設定rules_version = '2';安全規則中的第一行:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

書寫規則

您將編寫和管理根據您為專案中的預設資料庫和每個附加資料庫建立的資料模型量身定制的 Cloud Firestore 安全規則。

所有 Cloud Firestore 安全性規則都包含match語句,這些語句標識資料庫中的文檔,並allow表達式控制對這些文檔的存取:

service cloud.firestore {
  match /databases/{database}/documents {
    match /<some_path>/ {
      allow read, write: if <some_condition>;
    }
  }
}

在讀取或寫入任何資料之前,都會根據您的安全規則評估來自 Cloud Firestore 行動/Web 用戶端庫的每個資料庫請求。如果規則拒絕存取任何指定的文件路徑,則整個請求將失敗。

以下是基本規則集的一些範例。雖然這些規則有效,但不建議將它們用於生產應用程式:

需要身份驗證

// 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 CLI 或 Cloud Firestore 管理 REST API 在 Firebase 控制台中部署規則。

Cloud Firestore 安全規則的更新可能需要一分鐘才能影響新的查詢和偵聽器。但是,可能需要長達 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 Firestore 強大的資料庫功能以及 Cloud Storage 的檔案儲存和管理功能。一起使用時,這些產品還可以增強應用程式安全性,因為 Cloud Firestore 可以擷取兩種產品的 Firebase 安全規則可使用的授權要求。更多資訊請參閱雲端儲存指南

下一步