サーチ…


備考

Firebaseリアルタイムデータベースルールは、データベースへの読み書きアクセス権、データの構造、および存在するインデックスを決定します。これらのルールはFirebaseサーバに保存され、常に自動的に適用されます。あなたのルールで許可されている場合にのみ、すべての読み書き要求が完了します。デフォルトでは、認証されたユーザーのみがデータベースへの完全な読み取りおよび書き込みアクセスを許可するようにルールが設定されています。これは、ルールをカスタマイズしたり、認証を設定したりするまで、データベースを濫用から守るためです。

Firebase Database RulesはJavaScriptのような構文を持ち、4つのタイプがあります:

ここに画像の説明を入力

承認

ユーザーの特定はセキュリティの一部に過ぎません。それらが誰であるかを知ったら、データベース内のデータへのアクセスを制御する方法が必要です。 Firebase Database Rulesでは、各ユーザのアクセスを制御できます。たとえば、誰もが/foo/パスを読むことができるセキュリティルールのセットはありますが、誰にも書き込むことはできません:

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

.read.writeルールはカスケードするので、このルールセットはpath / foo /にあるすべてのデータと、 /foo/bar/bazなどのより深いパスに読み込みアクセスを許可します。アクセスを許可する.readおよび.writeルールは、アクセスを許可しないデータベース内の他のルールを上書きすることに注意してください。言い換えれば、適用可能なすべての.read.writeルールはORで結ばれています)。パス/foo/bar/bazルールがfalseと評価されても、この例では/foo/bar/bazへの読み取りアクセスは引き続き許可されます。

Firebaseデータベースルールには、他のパス、サーバサイドタイムスタンプ、認証情報などを参照できる組み込みの変数と関数が含まれています。次に、認証されたユーザの書き込みアクセスを/users/<uid>/に許可するルールの例を示します。ここで、Firebase認証で取得されたユーザのIDです。

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

データ検証

Firebaseリアルタイムデータベースはスキルレスです。これにより、開発中に物事を簡単に変更できるようになりますが、アプリの配布準備が整ったら、データの一貫性を保つことが重要です。ルール言語には.validateルールが含まれて.read.writeルールと.writeルールに使用されているのと同じ式を使用して検証ロジックを適用できます。唯一の違いは、書き込みが許可されるためには、すべての関連する検証ルールが真でなければならないということです(言い換えれば、適用可能なすべての.validateルールは、データベースの書き込みを可能にするために一緒にANDされます)。

これらのルールでは、 /foo/書き込まれるデータは、100文字未満の文字列でなければなりません。

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

検証ルールは、 .readおよび.writeルールと同じ組み込み関数および変数にアクセスできます。これらを使用して、データベース内の他の場所、ユーザーの身元、サーバー時間などを認識する検証ルールを作成することができます。

データベースインデックスの定義

Firebase Realtime Databaseは、データの順序付けと照会を可能にします。小さなデータサイズの場合、データベースは随時照会をサポートしているため、一般に、開発中はインデックスは必要ありません。ただし、アプリを起動する前に、アプリの成長に合わせて引き続き作業を続けるために必要なすべてのクエリにインデックスを指定することが重要です。

インデックスは.indexOnルールを使用して指定します。恐竜のリストの高さフィールドと長さフィールドをインデックスするインデックスの例を次に示します。

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow