2016-06-25 7 views
1

Ich versuche, eine einfache Chat-App mit der Firebase-Plattform zu entwickeln. Um eine Liste der Konversationen anzuzeigen, verwende ich FirebaseRecyclerAdapter. Die Sache ist, dass ich nicht herausfinden kann, wie man die Regeln richtig einstellt, so dass Benutzer nur auf Konversationen zugreifen können, denen sie angehören.Struktur der Firebase-Regeln mit FirebaseRecyclerAdapter

So sieht meine Firebase DB-Struktur aus.

{ 
    "conversations": { 
     "cid1": { 
      "title": "Conversation1" 
     }, 
     "cid2": {... 
     }, 
     "cid3": {... 
     } 
    }, 
    "members": { 
     "cid1": { 
      "uid1": true, 
      "uid2": true 
     }, 
     "cid2": {... 
     }, 
     "cid3": {... 
     } 
    }, 
    "users": { 
     "uid1": { 
      "name": "User1" 
     }, 
     "uid2": {... 
     }, 
    } 
} 

Und das sind die Regeln, die ich versuche anzuwenden.

{ 
    "rules": { 
     "conversations": { 
      "$conversation_id": { 
       ".read": "root.child('members').child($conversation_id).child(auth.uid).exists()", 
      } 
     }, 
    } 
    } 

Durch diese Regeln anwenden und mit FirebaseRecyclerAdapter ich diesen Fehler.

Ich nehme an, es ist, weil ich Benutzern erlaube, Konversationselement zu lesen, aber nicht die ganze Liste der Konversationen. Hat jemand eine Idee, wie man dieses Problem lösen kann?

+0

was ist 'mid1',' mid2'? – adolfosrs

+0

Wir müssen den Code sehen, mit dem Sie darauf zugreifen. – adolfosrs

+0

@adolfosrs: Es sollte die Benutzer-ID sein. Bearbeitete die Struktur, also hoffe ich, dass es jetzt mehr Sinn macht. –

Antwort

0

Sie sind auf eine der Gefahren in den Sicherheitsregeln von Firebase verfallen: Sie können Sicherheitsregeln nicht verwenden, um Daten zu filtern.

Ihr Listenadapter hört /conversations. Je nachdem, ob der Benutzer Leseberechtigung für /conversations hat, wird dieser Lesevorgang erfolgreich sein oder fehlschlagen.

Da Sie keine Leseberechtigung für /conversations erteilen, wird der Listener abgebrochen. Dies ist bekannt als Rules Are Not Filters in der Dokumentation und wurde covered frequently here on Stack Overflow (weil es eine solche Fallstrick ist). Für eine der ältesten und immer noch besten Antwort, siehe: Restricting child/field access with security rules

Verwandte Themen