CloudFirestoreのセキュリティルールの記法とその意味について話していきます。
セキュリティルールとは
Firebaseリソースへのアクセス制限を付与するもの。
それはGoogleが独自に作成したセキュリティルール言語によって定義される。
主には以下の3つに定義されるもの
- Cloud Firestore
- Cloud Storage
- Realtime Database(少し記法が違うみたい)
例えば、Cloud Firestoreでのルール記述画面は以下の通りである。
基本の構造
rules_version = '2';
service cloud.firestore { // サービス名
match /databases/{database}/documents { // バケット内のパス
match /{document=**} { // バケット内のパス
allow read,write; // メソッドと条件
}
- サービス名 上記で挙げた3つのサービスである。記載したいルール毎にサービス名を変える必要がある。
- バケット内のパス CloudStorageだったらファイルまでのパス、CloudFirestoreだったらデータが存在するところまでのパスを記述する。
ここからは上記ソースを元に説明していく。
上記ソースは2行に連なって書かれている。
- CloudFirestoreまでのパス
- CloudFirestore内で定義されたデータまでのパス(上記ソースだとCloudFirestore内全てを参照している)
CloudFirestoreまでのパス
1に関してWebサーバでいうドキュメントルートを設定する方法がサービスによって違うのでまとめてみた。
*** 1. CloudFirestoreでのドキュメントルートまでの記法
match /databases/{database}/documents {}
// Cloud Storageでのドキュメントルートまでの記法
match /b/{bucket}/o {}
CloudFirestore内で定義されたデータまでのパス
2に関してはパスの”完全一致”と”部分一致”によって記法が異なる。
例によって説明していく。
以下はCloudFirestoreのデータの様子である。
完全一致によるセキュリティルールの記法
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以下すべてのデータに読み取り、書き込み権限を付与している。
まとめ
今回はセキュリティルールでよく使われる題材を用いてその記法の意味を説明していった。
今後は関数化やメソッドを深堀していこうと思う。
終わり
コメント