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

333
Vistas
Las funciones de reglas de Firestore get () y existe () no devuelven el resultado deseado. ¿Qué estoy haciendo mal?

ingrese la descripción de la imagen aquí

Esta es la estructura básica de la base de datos de Firestore que estoy usando. editar: todos los nombres están en minúsculas

Las reglas que quiero son

  1. los administradores de un albergue pueden leer todas las habitaciones del albergue
  2. los residentes de una habitación solo pueden ver la habitación si la habitación tiene la identificación de los residentes en su subcolección de residentes

1 funciona según lo previsto 2 no

 match /databases/{database}/documents { match /hostels/{hostelId} { allow read, write: if request.auth.uid != null; match /rooms/{roomId} { allow read, write: if exists(/databases/$(database)/documents/ hostels/$(hostelId)/admins/$(request.auth.uid)); allow read: if exists(/databases/$(database)/documents/ hostels/$(hostelId)/rooms/$(roomId)/residents/$(request.auth.uid)); } } }

mientras leo salas como residente me sale un error

 Null value error. for 'list' @ L49

También probé con get () leyendo un campo booleano de documento residente y sin suerte.

¿Qué estoy haciendo? ¿Existe un límite para la profundidad del argumento de ruta de acceso() y get()? Cualquier ayuda sería muy apreciada

el código que uso para consultar habitaciones por residente es

 let q = collection(this.hostelCollection, this.residentSnap.get('hostel_id'), "rooms") let docs = await getDocs(q);

el documento de residente tiene un campo hostel_id que contiene la identificación del albergue

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

0

Intente agregar una sola declaración de permiso de allow read y refactorizar las reglas como se muestra a continuación:

 rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /hostels/{hostelId} { allow read, write: if request.auth.uid != null; match /rooms/{roomId} { function isAdmin() { return exists(/databases/$(database)/documents/hostels/$(hostelId)/admins/$(request.auth.uid)); } function isResident() { return exists(/databases/$(database)/documents/hostels/$(hostelId)/rooms/$(roomId)/residents/$(request.auth.uid)); } allow read: if isAdmin() || isResident(); allow write: if isAdmin(); } } } }
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