2016-11-17 1 views
0

私はuidのメッセージがのtoフィールドまたはfromフィールドのいずれかと等しいか、またはメッセージの 'to'セクションがallに設定されている場合にのみ読むようにします。私はいくつかのルールをしようとすると、あまりにもFirebaseドキュメントを読んでメッセージを読むためにどのFirebaseセキュリティルールを使うべきですか?

{ 
"intents" : { 
    "intentFields" : "", 
    "intentName" : "", 
    "to" : "" 
}, 
"messages" : { 
    "-KViVgc7ZG051eMXP0-5" : { 
    "from" : "Ed", 
    "name" : "Ed", 
    "photoUrl" : "https://cdn1.iconfinder.com/data/icons/user-pictures/100/male3-512.png", 
    "text" : "Hello, I'm Ed", 
    "timeStamp" : "1476880306", 
    "to" : "all", 
    "type" : "text" 
    }, 
    "-KWmsuvm0uJIf01eHfyN" : { 
    "from" : "Capyv3mxQsUUn2W1nPOgcJ0Ex9T2", 
    "name" : "Aakash Bansal", 
    "photoUrl" : "https://lh5.googleusercontent.com/-oQyA4HXVycc/AAAAAAAAAAI/AAAAAAAAHKo/Ov0A0p0LjiY/s96-c/photo.jpg", 
    "text" : "ho", 
    "timeStamp" : "1479396273", 
    "to" : "Ed", 
    "type" : "text" 
    } 
} 
} 


これは私のデータベースです。しかし、私の結果を達成するのに役立つルールはありませんでした。

私が試したルールの例は次のとおりです。彼らは私の所望の結果を達成していないが、それらはアプリ内のすべてのメッセージを表示するものの、ルールの次のセットは、正常に動作します一方

{ 
"rules": { 
    "intents" : { 
    ".read" : "auth.uid === data.child('to').val()", 
    ".write" : true 
    }, 
    "messages" : { 
    "$message": { 
      ".read": "auth.uid !== null", 
      ".write": true 
    } 
    } 
} 
} 

{ 
"rules": { 
    "intents" : { 
    ".read" : "auth.uid === data.child('to').val()", 
    ".write" : true 
    }, 
    "messages" : { 
    ".read": "auth.uid !== null", 
    "$message": { 
      ".write": true 
    } 
    } 
} 
} 


だけ通知する、私はデータを読み取るためのAndroidアプリでfirebaseui使用しています。私が「火災の安全ルール」を理解していないと何かが間違っているかどうか教えてください。

EDIT:でも、ルールの次のセットが機能していない:

{ 
"rules": { 
    "intents" : { 
    ".read" : "auth.uid === data.child('to').val()", 
    ".write" : true 
    }, 
    "messages": { 
    "$message": { 
     ".read" : true, 
     ".write": true 
    } 
    } 
} 
} 


私はデータを読み取るために使用するアンドロイドのコードは次のとおりです。
あるどのよう

mFirebaseAdapter = new MessageAdapter(FriendlyMessage.class, 
     R.layout.message_my, 
     RecyclerView.ViewHolder.class, 
     mFirebaseDatabaseReference.child("/messages")); 
+0

あなたは*メッセージを読む*? '/ messages'を読み込もうとしているなら、実際にはこれらのルールで失敗するでしょうから。これは一般的な混乱の原因です。ドキュメントでは[フィルタはルールではありません](https://firebase.google.com/docs/database/security/security-data#rules_are_not_filters)として説明していますが、[こちらの回答はこちら](http://stackoverflow.com/a/14298525/209103)。 –

+0

あなたのコードはどこですか?何を実際に読んでいるのですか? (ヒント:上のPufのコメントはほぼ確実ですが、コードなしではわかりません) – Kato

+0

はい、私はfirebaserecycleradapterを/ messagesに配置しました。 –

答えて

0
{ 
    "rules": { 
    "messages": { 
     "$message": { 
     ".read": "auth.uid === data.child('to').val() || auth.uid === data.child('from').val() || data.child('to').val() === 'all' ", 
     ".write": true 
     } 
    } 
    } 
} 
+0

申し訳ありませんが、編集したバージョンが動作しているかどうかを教えてください。 – ksav

+0

いいえ、それは動作していません。私はすでにこのソリューションといくつかのより似たようなソリューションを試しましたが、私はアプリケーション内にデータを取得していません。 –

+0

何が問題なのですか?あなたは何をしようとしていますか?あなたはどんなエラーを出していますか? – ksav

関連する問題