Regras baseadas em consulta com auth.uid não funcionando
Eu tenho a seguinte estrutura:
events
-LEe7X118dkcH2JhJRe
description: "Testdescr"
eventTasks
participants
0zlwpSlCazNGjOyMi95h8awshrG2
lastLogin: 1528641494535
userKey: "0zlwpSlCazNGjOyMi95h8awshrG2"
username: "User1"
6LnYKxRu2SWUrxwIzId8dDpOrl02
lastLogin: 152856590172
userKey: "6LnYKxRu2SWUrxwIzId8dDpOrl02"
username: "User2"
Quero consultar todos os eventos aos quais um usuário participa (como um filtro). Meu código Java é:
mDatabaseReference = FirebaseDatabase.getInstance().getReference("event");
mDatabaseReference.orderByChild("participants/"+userId+"/userKey").equalTo(userId).addChildEventListener [...]
Isso funciona como um encanto - eu recebo apenas os eventos corretos.
Agora eu quero criar regras baseadas em consulta no lado do servidor (https://firebase.google.com/docs/database/security/securing-data) Então eu criei uma regra de leitura como:
".read": "query.orderByChild == 'participants/'+auth.uid+'/userKey' && query.equalTo == auth.uid"
Problema: não consigo salvar essa regra. O Firebase me fornece o erro: "Inválido == expressão: operando à direita deve ser um literal de ordenação ou string ao comparar com um ordenamento.". Por que não é possível usar "query.orderByChild" em combinação com auth.uid?
O que estou fazendo errado?
EDITAR: Aqui estão minhas regras completas:
{
"rules": {
".write": true,
"event":{
".read": "query.orderByChild == 'participants/'+auth.uid+'/userKey' && query.equalTo == auth.uid"
}
}
}