2017-10-10 3 views
1

Ich versuche, Dokumente basierend auf einem Feld abzufragen.Firestore-Datenbankregeln: Berechtigungen für Abfragen

Aufgrund dieses Feld I Berechtigungen haben dieses Dokument zu lesen:

match /lists/{list=**} { 
    allow read: if resource.data.name == 'MyDocument' 
} 

Wenn ich versuche, dieses Dokument direkt abzurufen, es ist erfolgreich (Android-Client Kotlin):

val doc = db.document("lists/acaa0247-eccd-4ff0-b986-7f8b6187e45f") 
doc.get().addOnCompleteListener { task -> 
      if (task.isSuccessful) { 
       // here it works 
       println("This Works") 
      } else { 
       println("Failed") 
      } 
     } 

Aber wenn ich danach frage (oder versuche, alle Dokumente in der Sammlung zu bekommen), erhalte ich eine Ausnahme mit Ausnahme der Berechtigung:

val collection = db.collection("lists") 
collection.get().addOnCompleteListener(activity, { task -> 
      if (task.isSuccessful) { 
       println("Should work") 
      } else { 
       // Here is isn't working 
       println("Failed") 
      } 
     }) 

Diese Abfrage funktioniert, wenn ich alle erlauben alle Dokumente unter /lists zu lesen:

match /lists/{list=**} { 
    allow read: if request.auth != null 
} 

Also meine Frage ist: Hat der Benutzer lesen müssen auf allen Dokumenten Zugriff, die in der Abfrage durchsucht werden? In meinem Fall würde dies alle Dokumente mit allen Feldern in /lists bedeuten?

Antwort

1

Meine Frage ist also: Muss der Benutzer Lesezugriff auf alle Dokumente, die in der Abfrage gesucht werden?

Ja.

Um zu vermeiden, dass der Fehler auftritt, wenn Sie die Liste abfragen, können Sie auf dem Client die where-Klausel verwenden, um nur Dokumente zu lesen, die Sie lesen dürfen.

+1

Also, wenn Sie 'collection.whereEqualTo (" name "," MyDocument ") verwenden. Get()' sollte es funktionieren? Probieren Sie es aus und ich bekomme auch eine Ausnahme für die Berechtigung verweigert. –

+0

Ja excatly. Dann erstellen Sie einen Index und stellen in den Sicherheitsregeln sicher, dass der Benutzer tatsächlich Zugriff hat. – DauleDK

+0

Btw @MarcelBochtler - Suchen Sie die Abfragesyntax hier: https://firebase.google.com/docs/firestore/query-data/queries – DauleDK

Verwandte Themen