У меня следующая структура:
events
-LEe7X118dkcH2JhJRe
description: "Testdescr"
eventTasks
participants
0zlwpSlCazNGjOyMi95h8awshrG2
lastLogin: 1528641494535
userKey: "0zlwpSlCazNGjOyMi95h8awshrG2"
username: "User1"
6LnYKxRu2SWUrxwIzId8dDpOrl02
lastLogin: 152856590172
userKey: "6LnYKxRu2SWUrxwIzId8dDpOrl02"
username: "User2"
Я хочу запросить все события, в которых участвует пользователь (например, фильтр).Мой Java-код:
mDatabaseReference = FirebaseDatabase.getInstance().getReference("event");
mDatabaseReference.orderByChild("participants/"+userId+"/userKey").equalTo(userId).addChildEventListener [...]
Это работает как талисман - я получаю только правильные события.
Теперь я хочу создать правила на основе запросов на стороне сервера (https://firebase.google.com/docs/database/security/securing-data). Итак, я создал правило чтения, например:
".read": "query.orderByChild == 'participants/'+auth.uid+'/userKey' && query.equalTo == auth.uid"
Проблема : я не могу сохранить это правило. Firebase выдает мне ошибку: «Неверное == выражение: правооперанд должен быть упорядоченным или строковым литералом при сравнении с упорядочением. ". Почему нельзя использовать" query.orderByChild "в сочетании с auth.uid?
Что я делаю не так?
РЕДАКТИРОВАТЬ : Вот мои полные правила:
{
"rules": {
".write": true,
"event":{
".read": "query.orderByChild == 'participants/'+auth.uid+'/userKey' && query.equalTo == auth.uid"
}
}
}