Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

230
Visualizações
Orden de ejecución en la canalización de consultas de Firestore: ¿por qué faltan permisos?

Mi colección de Firestore contiene un documento por usuario y la ID de usuario es la ID del documento.

Tengo las siguientes reglas:

 match /mycollection/{userId} { allow read, update, delete: if userId == request.auth.token.email; allow create, update: if request.auth.uid != null && userId == request.auth.token.email; }

Esto garantiza que

  • cada usuario puede leer, actualizar y eliminar "su" documento,
  • un nuevo usuario puede crear "su" documento.

Esto funciona muy bien cuando cargo el documento del usuario "por ID".

Sin embargo, no funciona cuando el documento se carga a través de una consulta:

 const query = db.collection("mycollection") .where("user", "==", userId) .where("writeDate", ">", writeDate) .get()

Como puede ver, el usuario solo carga "su propio documento", por lo que, en mi opinión, la solicitud cumple con las reglas de acceso. Sin embargo, recibo un error de "Permisos faltantes o insuficientes" de todos modos.

¿Por qué?

Supongo que esto tiene que ver con el orden de ejecución de consultas y reglas en Firestore, pero no he encontrado nada en la documentación al respecto. Mientras solo acceda a los documentos que tengo derecho a leer, todo debería estar bien, ¿no?

En caso de que se lo pregunte: necesito la consulta para descargar el documento solo si ha cambiado (de ahí la cláusula "fecha" donde). Sé que puedo hacerlo con actualizaciones en tiempo real (usando onSnapshot o similar). No quiero conocer enfoques alternativos.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Lo encontré. Las siguientes reglas no funcionan:

 match /mycollection/{userId} { allow read, update, delete: if userId == request.auth.token.email; allow create, update: ... }

Estas reglas funcionan:

 match /mycollection/{userId} { allow read, update, delete: if resource.data.user == request.auth.token.email; allow create, update: ... }

El userId funciona solo si se accede al documento a través de su ID.

Si la regla se basa en un campo del documento (aquí: user ), debe usar el campo como resource.data.user .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda