みかづきブログ・カスタム

基本的にはちょちょいのほいです。

Firebaseのリアルタイムデータベースで読み込みは誰でもOK、書き込みは事前に許可したGoogleアカウントのみに限定するルールの書き方 🔥

Firebase



結論

{
  "rules": {
    ".read": "true",
    ".write": "auth.token.email === 'hoge@gmail.com'
  }
}

結論だけえ先に書くと、この書き方で、hoge@gmail.comでログインしたユーザーのみ更新可能になります。


背景

時代なのか、最近リアルタイム更新を求められるウェブサイト制作の依頼が増加しています。
そんなときはFirebaseのRealtime Databaseをつかうことが多いのですが、

・更新内容が即時に反映される
・adminだけが更新できる

という仕様を求められることが多いです。
つまり、「管理画面で更新した内容をリアルタイムに表示したい」という要件ですね。


Realtime Databaseのルールの書き方

Realtime Databaseがどんなものなのかという紹介と、基本的な使い方は説明を省きます。
僕が説明するよりも公式のドキュメントのほうがわかりやすいからです。

firebase.google.com

実は、ルールの書き方、サンプルももドキュメントに丁寧に記載されているのですが、ものすごくシンプルに、「誰でも読み取れるけど、書き込めるのは事前に指定したGoogleアカウントのみ」というサンプルはなかったので、筆を取った次第です。


ルールのサンプル

全員読み書き可

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

全員読み書き不可

{
  "rules": {
    ".read": false,
    ".write": false
  }
}

全員読み込み可、書き込み不可

{
  "rules": {
    ".read": true,
    ".write": false
  }
}

全員読み込み可、事前に指定したGoogleアカウントのみ書き込み可

{
  "rules": {
    ".read": true,
    ".write": "auth.token.email === 'hoge@gmail.com'
  }
}

といった具合です。


注意事項

Googleアカウントでのログインを実行するためには、Firebase Authenticationを実装しておく必要があります。

firebase.google.com

また、AuthenticationタブのSign-in methodでGoogleアカウントでのログインを有効にしたり、下の方にちらっと映ってますが、ドメインを承認したりする必要があるので、ルールだけ書けば良いというものではありません。

Authentication

その辺りも、のちにまとめられたら良いなと思います。