1

私は、セキュリティと読み取り/書き込み/検証ルールについて、Firebaseのドキュメントを読んできました。ドキュメントは非常に詳細ですが、セキュリティルールがパフォーマンス(クエリの検索、データの書き込みなど)に与える影響についての情報はありません。Firebaseの読み取り/書き込み/検証ルールのパフォーマンスへの影響は?

例えば、以下のデータベースの例を検討:

myapp : { 
    projects : { 
     <project_id> : { ... } 
    } 
    users : { 
     <uid> : { role : <admin or pm or other> } 
    } 
} 

...と読書については、以下のデータベースルール:

rules : { 
    projects : { 
     $project : { 
      { 
       .read: root.child(‘users’).child(auth.uid) && root.child(‘users’).child(auth.uid).child(‘role’).val() == “admin” || root.child(‘users’).child(auth.uid).child(‘role’).val() == “pm” 
        } 
       } 
      } 

それはどんな$プロジェクトノードからデータを読み取ることになる

(EXを:.child( "projects/alpha").once())、このルールはパフォーマンスにどのような影響を与えますか?読み込みルールが存在しない場合と比較して、複数のクエリ/読み込みを1つずつ実行すると、 Firebaseは再評価を避けるためにルールの結果をどこかに保存しますか?

答えて

1

Firebaseの読み書きルールは、データを書き込む場所またはリスナーを接続する場所で評価されます。あなたが共有した例では、すべてのプロジェクト名の読み取り権限を持っているか、または許可がありません(rules cannot be used to filter data以降)。したがって、すべての読み取り操作でルールを評価する必要はなく、リスナーをアタッチしたとき(または認証状態が変更されたとき)にのみルールを評価する必要があります。

Firebaseのセキュリティルールの宣言的な性質を考えると、これらの質問に対する回答は、あなたが書いたルールに影響するとは思えません。このような理由で宣言型になるように特別に設計されています。サーバー側の実装は、ルール言語を変更することなく変更できます。

あなたは何をしたいを指定してが効率的にそれらを実行する方法をを決定するFirebaseデータベース・サーバに任せるのルールを記述する必要があります。あなたのルールが読み書きを遅くしていると思われるケースに遭遇した場合は、の質問になります。

+0

こんにちはフランク、すばやく返信いただきありがとうございます。フォローアップとして、規則を持っているのと対立していて、規則を持っていないと、パフォーマンスにどのような影響がありますか?それは本質的に無視できますか? (私は、より明確になるように質問を編集した)。 –

+1

特定のルールに起因すると思われるパフォーマンス上の問題が発生していない限り、私はユースケースに合ったルールを書くことに固執します。それ以外は早すぎる最適化です。 –

関連する問題