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?
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. –
Ja excatly. Dann erstellen Sie einen Index und stellen in den Sicherheitsregeln sicher, dass der Benutzer tatsächlich Zugriff hat. – DauleDK
Btw @MarcelBochtler - Suchen Sie die Abfragesyntax hier: https://firebase.google.com/docs/firestore/query-data/queries – DauleDK