2017-05-11 6 views
2

私は自分の正気のために質問があります。複数の継承Firebaseのセキュリティルール

  • ALLユーザーは、すべてのユーザーがすることはできません任意のノード
  • を読み取るためにauth'edする必要があります。以下は、私のfirebase規則の一部

    { 
        "rules": { 
         ".read": "auth != null", 
         ".write" : false, 
         "users": { 
          "$uid": { 
           ".read": "auth != null && auth.uid == $uid", 
           ".write": "auth != null && auth.uid == $uid", 
           "tokens": { 
            ".write": "(newData.val() < data.val())" 
           } 
          } 
         }, 
         ... 
    

    私が正しく理解していればルールは、その状態がありますユーザノードへ

  • 特定の任意のノードに書き込む:
  • 独自のデータから読み取るためには、あなたはauth'edする必要があり、あなただけの独自のノードを読み取ることができ
  • 独自のユーザーデータに書き込むためには
  • は、あなたがauth'edする必要があり、ユーザー/トークンノードだけ減算することができ
  • あなただけの独自のノードに書き込むことができますし、任意のユーザーが増加したことがない

Firebaseセキュリティルールのドキュメントを読んでいる私の前提や理解を誰かが確認できますか?

また、誰も良い記事やシミュレータを使用する上で役立つヒントを持っていますか?

答えて

0

セキュリティルールの重要な概念は、読み取り/書き込みルールがツリーを「カスケード」することです。これについては、the documentationで簡単に説明します。これは、ルールを上から下へと読むと、アクセスを許可する最初のルールが、そのロケーションの子でそのルールの下に指定されたルールよりも優先されることを意味します。あなたの項目の各アドレッシング

:すべてのユーザーは、すべてのユーザーが任意のノードに書き込むことはできません任意のノード(YES

  • を読み取るためにauth'edしなければならない

    • を(非認証「ユーザー・ノードへの特定のユーザーの任意のノードに書き込むことはできません)
    • 編:独自のデータから読み取るためには
    • を、あなたはauth'edする必要があり、あなただけの独自のノードを読み取ることができます(YES
    • 独自のユーザーデータに書き込むためには、あなたがauth'edする必要があり、あなただけの独自のノード(YESに書き込むことができます)
    • ユーザー/トークンのノードにのみ減算することができ、 auth'edユーザーへの書き込みアクセスを許可する前に、ルールはそれよりも優先されますので、任意のユーザー(下記参照)、現在のルールで

    増加したことがない、小さなトークンのチェックは有効ではありません。また、既存のトークン値がない場合に対処する必要があります。これを修正するための私の提案は、.validateルールを使用することです。 documentationはお勧めします.WRITEルールがアクセスを許可された後

    はデータ は、特定のスキーマに準拠し書き込まれていることを確認するために、使用されます。シミュレータ用として

    { 
        "rules": { 
        ".read": "auth != null", 
        ".write": false, 
        "users": { 
         "$uid": { 
         ".read": "auth.uid == $uid", 
         ".write": "auth.uid == $uid", 
         "tokens": { 
          ".validate": "!data.exists() || (newData.val() < data.val())" 
         } 
         } 
        } 
        } 
    } 
    

    、私はすべてのユーザーガイドを知りませんが、実験によってそれを使用する方法を学ぶことができました。これはルールを理解するのに非常に有効なツールです。ここで

    は、シミュレータを使用してのいくつかの例です:あなたはシミュレータを開くと

    、認証、非認証されたユーザをシミュレートされ、オフになっています。読み込みをシミュレートするには、読み込みボタンをクリックし、場所を入力します。 /users/xyz/tokensと入力し、[実行]をクリックします。その操作を禁止するルールの行に赤いXが表示されます。認証された読み取りをシミュレートするには、Authenticatedボタンをクリックし、便宜上、「Frank」のような単純なユーザーUIDを入力します。次に、位置/users/Frank/tokensを入力し、実行をクリックして、読み込みが成功したことを確認します。

    書き込み、場所の入力、認証の設定と値についても同様のテストを行うことができます。

  • +0

    私はあなたが正しいと確信していません。シミュレータで、私は "write"を持っていても正常に書くことができます:ルートに "false"。シミュレーターで試してみてください。しかし、あなたは正しい方向ではありません。<<親階層のセキュリティルールがアクセスを許可している場合は、許可されます。したがって、親でTRUEにセキュリティを設定し、子パス>> – Learn2Code

    +0

    で取り消すことはできませんが、私の主な理由はトークンルールを強制する方法を見つけ出し、ユーザーが値を減らしてインクリメントしないようにすることです!?あなたはそれのための任意のアイデアを持っていますか? – Learn2Code

    +0

    @ Learn2Code:私はあなたのルールを使用しており、書くことができません。どのような場所を指定していますか? –