Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

157
Views
¿Cómo construir una base de fuego donde la consulta de uno de los campos tiene permisos bloqueados?

Así que tengo una colección sobre la que quiero consultar, pero no tengo permisos para ver todos los documentos. ¿Puedo hacer una consulta que no falle si solo se me bloquea uno de los documentos que estoy consultando? ¿O debo hacer un preprocesamiento para limpiar primero los identificadores de artículos?

 firebase .firestore() .collection("articles") .where(firebase.firestore.FieldPath.documentId(), "in", articleIds) .get() .then((results) => results.docs .map((result) => console.log(result.data())) )

Entonces, si articleIds = [1, 2, 3, 4, 5], entonces todo está bien, porque tengo permiso para ver esos artículos y la llamada se realiza correctamente. Sin embargo, si articleIds=[1, 2, 3, 4, 100], la llamada falla porque no tengo permiso para ver el artículo 100.

Entonces, ¿hay alguna manera de hacer que esta llamada tenga éxito incluso si no tengo permisos?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

No especifica las reglas de seguridad que le otorgan acceso a los documentos 1-5 y le niegan el acceso a 100. (Los documentos ) dicen que necesita estructurar su consulta para que coincida con las reglas de seguridad. Eso implica que incluso si tiene acceso a los documentos [1, 2, 3, 4, 5], la consulta debería fallar, a menos que su regla de seguridad dependa de esa identificación.

La consulta falla incluso si el usuario actual es realmente el autor de cada documento de la historia. El motivo de este comportamiento es que cuando Cloud Firestore aplica sus reglas de seguridad, evalúa la consulta según su conjunto de resultados potencial, no según las propiedades reales de los documentos en su base de datos. Si una consulta podría incluir potencialmente documentos que violan sus reglas de seguridad, la consulta fallará.

 db.collection("stories").where("author", "==", user.uid).get()

Esto tendría éxito porque la regla de seguridad otorga acceso de lectura a una historia basada en el autor, y eso es parte de su consulta. Otro ejemplo en la página:

 match /mydocuments/{doc} { allow read: if resource.data.x > 5; }

Esta consulta falla porque potencialmente puede devolver documentos con x <= 5, incluso si los ID 1 y 3 no existen:

 db.collection("mydocuments").where("x", "in", [1, 3, 6, 42, 99]).get()

Pero esto tiene éxito porque todos los documentos consultados pasan la regla:

 db.collection("mydocuments").where("x", "in", [6, 42, 99, 105, 200]).get()
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!