Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda