@Jan У вас может быть путь, пример, приведенный в документации: query.orderByChild == адрес / почтовый индекс. Но эта спецификация пути одинакова для всех пользователей, поэтому правила данных не изменяются при входе в систему нового пользователя. То, что вы пытаетесь сделать, оказывает огромное влияние на способ обработки правил данных. Вот почему я думаю, что использование auth.uid в качестве параметра запроса не удастся.

я есть следующая структура:

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"      
     }
  }
}

Ответы на вопрос(0)

Ваш ответ на вопрос