2016-11-17 6 views
0

Я хочу, чтобы только те пользователи читали сообщения, uid равно или оба поля to или frommessage или если в поле «Кому» сообщения установлено значение 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")); 
+0

Как вы * читаете * сообщения? Потому что, если вы пытаетесь прочитать '/ messages', это действительно не сработает с этими правилами. Это общий источник путаницы, который мы описываем как [правила не являются фильтрами] (https://firebase.google.com/docs/database/security/securing-data#rules_are_not_filters) в документации и в [этом ответе здесь ] (http://stackoverflow.com/a/14298525/209103). –

+0

Где ваш код? Что вы на самом деле читаете? (подсказка: комментарий Puf выше почти наверняка является ответом, но не может сказать без кода) – Kato

+0

Да, puf, я поставил firebaserecycleradapter в/сообщениях, где я должен положить его для получения сообщений? –

ответ

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