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

308
Vistas
Cómo diferenciar entre diferentes errores de permisos en Firestore

Estoy creando una aplicación con Firebase y uso el SDK de Javascript del lado del cliente para acceder a los datos de Firestore. Me encuentro con un problema: con mis reglas de Firestore, si un documento no se puede leer, no hay forma de determinar por qué no se pudo leer. Cualquier falla de las reglas para permitir que el documento se lea produce el mismo PERMISSION_DENIED: Missing or insufficient permissions .

Sin una forma de determinar por qué se denegó el acceso, no puedo presentar la forma correcta de obtener acceso al recurso en la interfaz de usuario, o decir qué salió mal (por ejemplo, debe iniciar sesión para usar este complemento, o debe comprar una suscripción para trabajar este widget) Viniendo de un fondo de nodo, he escrito una gran cantidad de código utilizando códigos de respuesta http como este (pseudocódigo):

 if (!doc) { // present a 'not found' message to the user return {status: 404} } else if (!req.user) { // present a log in/sign up dialog return {status: 401} } else if (req.user !== doc.owner) { // present a no-access message return {status: 403} } else { return {status: 200: body: doc} }

Aparte de escribir una capa del lado del servidor para manejar los permisos en lugar de usar firestore.rules, o crear una colección separada solo para manejar los permisos, que tendrían que mantenerse sincronizados manualmente y requerir el doble de lecturas, ¿hay alguna manera de escribir el reglas para poder diferenciar las diferentes razones del fracaso? Parece que si deny implementara una palabra clave de denegación, esto sería fácil:

 deny read 401: if !request.auth.uid deny read 403: if request.auth.uid !== resource.data.owner

Pero, por desgracia, no existe tal palabra clave deny .

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Ese mensaje no se puede personalizar a partir de ahora. Una forma de evitar esto podría ser no realizar la solicitud como primer lugar si el usuario no ha iniciado sesión. Por ejemplo:

 if (getAuth().currentUser) { // fetch data } else { alert("Please login") }

Puede ser un poco desafiante para 401 y 403, pero si pudiera enumerar en qué casos puede haber un error 403, entonces definitivamente puede estructurar su código de esa manera.

Para 404, puede usar la propiedad .exists si se devuelve DocumentSnapshot

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