2017-02-23 6 views
0

私は自分のルールを設定しました。通常、すべてのデータは、それを行う権限のある人だけが読むことができます。しかし、私は例外を作りたい。これらは私のルールです:複数のレベルでFirebaseルールに除外データを追加する方法は?

"rules": { 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid", 
     "ForEveryone": { 
     ".read": true, 
      ".write": true 
     } 
     "NoWrite" : { 
      ".read": true, 
      ".write": false 
     } 
     } 
    } 

私は3つの文字列を持っているとしましょう。 String 1はプライベートと呼ばれ、認証人が読み書きすることができます。文字列2はForEveryoneです。誰もがデータを変更して書き込むことができます。文字列3はNoWriteですが、誰でも書き込みできません。

Expecting a ; or " at the line NoWriteというエラーが表示されます。だから私は何が間違っているの?それは間違って置いた}ですか?ありがとうございました。

+0

最初に、 "NoWrite"のすぐ上のコンマが、閉じた括弧の直後にありません。あなたのForEveryoneノードとNoWriteノードは実際にusers/uid親ノードの子ですか? – Jay

答えて

0

親ノードと子ノードの関係を見ることができるように、適切な間隔を置いたルールがあります。これはあなたが望むものではないようです。だからこれは本当の答えではありませんが、私たちが答えることができるより良い質問につながります。 OPが何であるかを知ったら更新されます。

{ 
    "rules": { 
     "users": { 
      "$uid": { 
       ".read": "$uid === auth.uid", 
       ".write": "$uid === auth.uid", 
       "ForEveryone": { 
        ".read": true, 
        ".write": true 
       }, 
       "NoWrite" : { 
        ".read": true, 
        ".write": false 
       } 
      } //end uid 
     } //end users 
    } //end rules 
} //outside closure 
+0

意図的なのか分かりませんが、OPの問題を修正しました。 –

2

ルール構造に取り組んでいるアプローチは機能しません。 Firebaseのセキュリティルールはカスケードします。つまり、任意のノードに与えられたアクセス権は、その子にもツリーにも適用されます。ノードに対して読み取りまたは書き込みアクセスを許可してから、さらにそれを取り消すことはできません。 (ただし、に許可されていません)。docs on rule cascadingを参照してください。

あなたのケースでは、誰かが書き込むことができないユーザーデータとできないユーザーデータが必要です。あなたの例では、NoWriteが認証されたユーザーによってのみ書き込まれるのか、それとも誰にも書き込まれないのかどうかは明らかではありません。 how you will be reading this dataに応じて、これらのデータを別々のコレクションに分けたり、$uidにアクセスできないようにしたり、ForEveryoneおよびNoWriteのルールのみを定義する必要があります。

最初のアプローチは、次のようになります。

"rules": { 
    "users-public": { 
     "$uid": { 
     ".read": "true", 
     ".write": "true", 
     }, 
    "users-nowrite": { 
     "$uid": { 
     ".read": "true", 
     ".write": "$uid === auth.uid" 
     } 
    } 

又は第二に、このように:あなたの構文エラーについては

"rules": { 
    "users": { 
     "$uid": { 
     "ForEveryone": { 
      ".read": "true", 
      ".write": "true" 
     }, 
     "NoWrite" : { 
      ".read": "true", 
      ".write": "$uid === auth.uid" 
     } 
     } 
    } 

、あなたはカンマが必要,閉じ括弧の後"NoWrite"前に。

関連する問題