Я только что начал использовать Firestore и пытаюсь создать правило безопасности для поддержки запросов такого типа из моего приложения (Android / kotlin)
firestoreDb.collection("messages").whereEqualTo("room_id", "c_1")
.orderBy("timestamp", Query.Direction.ASCENDING)
Структура моей базы данных:
room
-{roomId}
-members [] //this is an array of strings
messages
-{messageId}
-timestamp
-room_id
-message_text
Правило безопасности выглядит следующим образом:
service cloud.firestore {
match /databases/{database}/documents {
match /messages/{messageId} {
allow read: if request.auth.uid in get(/databases/$(database)/documents/rooms/$(resource.data.room_id)).data.members &&
request.query.orderBy == "timestamp"
}
}
}
Если я не использую заказ, то все работает нормально, и я получаю успешный ответ. Однако после применения orderBy в коде мне нужно добавить правило orderBy в правила безопасности firestore. К сожалению, я не смог найти ни одного примера синтаксиса, как это должно быть определено.
Это официальная документация Я использую в качестве справочного материала, но есть только пример для request.query.limit
, из которого неясно, как должен работать request.query.orderBy
.
Любая помощь высоко ценится
Приветствия