TL;DR;
- FireStoreベースとCustomUserClaimベース双方やっておくと便利
- CloudFunctionで同期を取れるようにしておくとなお良し
Firebaseでのユーザー権限
FirebaseでAdminだったりだとか課金ユーザーだったりとかの、一定の権限を持ったグループを作る場合、
カスタムユーザークレームを使うのと、
Firestoreに権限管理用のcollectionを作ってセキュリティルールで頑張るパターン(existsなどを書く)があります。
それぞれのメリットデメリット
カスタムユーザークレーム
メリット
- FireStoreに依存しないので、Storageのルールでも利用できる
- ルールが短くて済む
デメリット
- Adminでしか登録できない。(通常SDKでは操作不能)
- 自分の持っているClaim一覧を通常SDKでは取れない
権限管理用Collection+exists
メリット
- 細かい制御が可能
- 通常SDKでもルール次第で操作可能
デメリット
- storageのルールでは使えない
推奨したい方法
面倒だけれども、両方使ってしまえばいいとこどりが可能。
- カスタムクレームで済むものはカスタムクレームで済ます
- FireStore上にはクレーム一覧用のテーブルを読み取り専用で持っておく
- クレーム一覧テーブルの更新をトリガーとしてCloudFunctionを設定してカスタムクレームとの同期をとる