🎉
Cloud Firestoreでarray-containsを使ったときのセキュリティルールの書き方
初めまして。NuxtとFirebaseを使って、個人開発をしているキンジョウです!個人開発をしていて、array-contains
を使って、ロジックを書いた時に、セキュリティルールはどうしたらいいのか??って、分からなかったので、記事にして、共有しておきます!
環境
"node": "20.11.0",
"npm": "10.4.0",
"firebase": "^10.7.1",
array-containsの説明
array-contains
はフィールドの内の配列値に特定の文字列を含むドキュメントを全て返すQueryです。
より詳細はこちら
どんな時に必要になったのか?
ドキュメントのフィールドにinvites:[]
というフィールドを持っていて、配列内に自分のuidが存在するドキュメントを全て返すというところのロジックを書いたときに、array-contains
を使用しました。
index.vue
import { getDocs, query, where } from "firebase/firestore";
const q = query(tripListRef, where("invites","array-contains", uid));
const tripListDocs = await getDocs(q);
これだけでリストに自分が招待されているドキュメントを全て取得することができます。
解決方法
配列の中に一致するもののドキュメントを返すというセキュリティルールなんて、どうやって書けばいいの?と思いました。
結論はこうです。
firestore.rules
match /tripLists/{tripId}{
allow write: if request.auth != null
allow read: if request.auth.uid == resource.data.userId || request.auth.uid in resource.data.invites;
}
気づけば簡単なのですが、resource.data.invites
でドキュメントのフィールドにアクセスできます。なので、request.auth.uid in resource.data.invites
だけで簡単に書けます!🎉
短い記事ですが、少しでも誰かの役に立てば幸いです!
Discussion