【初学者向き】CloudFirestoreのセキュリティルールの記法とその意味

Firebase
 

CloudFirestoreのセキュリティルールの記法とその意味について話していきます。

セキュリティルールとは

Firebaseリソースへのアクセス制限を付与するもの。

それはGoogleが独自に作成したセキュリティルール言語によって定義される。

主には以下の3つに定義されるもの

  • Cloud Firestore
  • Cloud Storage
  • Realtime Database(少し記法が違うみたい)

例えば、Cloud Firestoreでのルール記述画面は以下の通りである。

f:id:atusibba1014:20210811073817p:plain

基本の構造

rules_version = '2';
service cloud.firestore { // サービス名
match /databases/{database}/documents { // バケット内のパス
match /{document=**} { // バケット内のパス
allow read,write; // メソッドと条件
}
  • サービス名 上記で挙げた3つのサービスである。記載したいルール毎にサービス名を変える必要がある。
  • バケット内のパス CloudStorageだったらファイルまでのパス、CloudFirestoreだったらデータが存在するところまでのパスを記述する。

ここからは上記ソースを元に説明していく。

上記ソースは2行に連なって書かれている。

  1. CloudFirestoreまでのパス
  2. CloudFirestore内で定義されたデータまでのパス(上記ソースだとCloudFirestore内全てを参照している)

CloudFirestoreまでのパス

1に関してWebサーバでいうドキュメントルートを設定する方法がサービスによって違うのでまとめてみた。

*** 1. CloudFirestoreでのドキュメントルートまでの記法
match /databases/{database}/documents {}
// Cloud Storageでのドキュメントルートまでの記法
match /b/{bucket}/o {}

CloudFirestore内で定義されたデータまでのパス

2に関してはパスの”完全一致”と”部分一致”によって記法が異なる。
例によって説明していく。
以下はCloudFirestoreのデータの様子である。
f:id:atusibba1014:20210812073823p:plain

完全一致によるセキュリティルールの記法

match /databases/{database}/documents { // CloudFirestoreのお作法
match /cleaning/proverb1 {
allow write;
}
}

どのユーザーにも、cleaning/proverb1という箇所にあるデータにのみ書き込みの権限を付与している。

部分一致によるセキュリティルールの記法

match /databases/{database}/documents { // CloudFirestoreのお作法
match /cleaning/{proverb}{
allow read, write: if request.auth != null;
}
}

ログインされたユーザーにのみ、cleaning以下すべてのデータに読み取り、書き込み権限を付与している。

まとめ

今回はセキュリティルールでよく使われる題材を用いてその記法の意味を説明していった。

今後は関数化やメソッドを深堀していこうと思う。

終わり

コメント

タイトルとURLをコピーしました