Я хочу, чтобы только те пользователи читали сообщения, uid
равно или оба поля to
или from
message
или если в поле «Кому» сообщения установлено значение all
.
Это моя база данных:Какие правила безопасности 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"
}
}
}
Я попытался несколько правил, и читать Firebase документации тоже. Но ни одно из правил не помогло мне достичь моего результата.
Пример правил, которые я попытался это:
{
"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
}
}
}
}
Просто сообщить, я использую firebaseui в Android приложения для чтения данных. Скажите, пожалуйста, что-то не так в моем понимании «правил безопасности firebase».
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"));
Как вы * читаете * сообщения? Потому что, если вы пытаетесь прочитать '/ messages', это действительно не сработает с этими правилами. Это общий источник путаницы, который мы описываем как [правила не являются фильтрами] (https://firebase.google.com/docs/database/security/securing-data#rules_are_not_filters) в документации и в [этом ответе здесь ] (http://stackoverflow.com/a/14298525/209103). –
Где ваш код? Что вы на самом деле читаете? (подсказка: комментарий Puf выше почти наверняка является ответом, но не может сказать без кода) – Kato
Да, puf, я поставил firebaserecycleradapter в/сообщениях, где я должен положить его для получения сообщений? –