🎃

Firebaseのルールの公式ドキュメントが雑すぎる件

2022/10/18に公開

自分がへぼなのか、このドキュメントを全て読んでもほとんど意味がわからない。

https://firebase.google.com/docs/database/security

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

これは

/foo

に入ってるデータは無条件で読み書き可能。うん、これはわかる。
でも次の例

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === 423",
        ".write": "$uid === 423"
      }
    }
  }
}

はい、これが通過するリクエストはどんなリクエストでしょうか。ちなみに公式ドキュメントにもどこにもサンプルリクエストは書いてありません。自力で見つけ出す必要があります。公式ドキュメントには

Realtime Database セキュリティ ルールには組み込み変数と関数が含まれています。これにより、他のパス、サーバー側のタイムスタンプ、認証情報などを参照できます。認証ユーザーに /users/uid/ への書き込みアクセス権を付与するルールの例を次に示します。ここで uidは、Firebase Authentication によって取得されたユーザーの ID です。

と書いてあります。なるほど。ってことはこれは通るのかな

/users/423/

いいえ。通りません。このルールを通過するリクエストの例はドキュメントには書かれていません。ちなみに「ここで uidは、Firebase Authentication によって取得されたユーザーの ID です。」と書いてありますが、$uidは自分で設定できます。必ずAuthenticationによって取得されたユーザーIDである必要はなく、この例ではたまたまユーザーIDという意味です。ドキュメントが雑すぎる。

まともな記事を探した
https://qiita.com/lacolaco/items/b068ab0cf19a26f0992d

サンプル

はい、一歩目。これは/usersへの読み書きしか許可されない。/usersへの読み書きは無条件で許可される。

OKOK。わかってきた。これはsidが432じゃないと読み書きできない。今日はこれで十分かな。

Discussion