Firebaseのユーザー権限周りの話


TL;DR;

  • FireStoreベースとCustomUserClaimベース双方やっておくと便利
  • CloudFunctionで同期を取れるようにしておくとなお良し

Firebaseでのユーザー権限

FirebaseでAdminだったりだとか課金ユーザーだったりとかの、一定の権限を持ったグループを作る場合、
カスタムユーザークレームを使うのと、
Firestoreに権限管理用のcollectionを作ってセキュリティルールで頑張るパターン(existsなどを書く)があります。

それぞれのメリットデメリット

カスタムユーザークレーム

メリット

  • FireStoreに依存しないので、Storageのルールでも利用できる
  • ルールが短くて済む

デメリット

  • Adminでしか登録できない。(通常SDKでは操作不能)
  • 自分の持っているClaim一覧を通常SDKでは取れない

権限管理用Collection+exists

メリット

  • 細かい制御が可能
  • 通常SDKでもルール次第で操作可能

デメリット

  • storageのルールでは使えない

推奨したい方法

面倒だけれども、両方使ってしまえばいいとこどりが可能。

  • カスタムクレームで済むものはカスタムクレームで済ます
  • FireStore上にはクレーム一覧用のテーブルを読み取り専用で持っておく
  • クレーム一覧テーブルの更新をトリガーとしてCloudFunctionを設定してカスタムクレームとの同期をとる