Tengo un problema en el que intento consultar una subconsulta por un campo, y probé el emulador y el soporte de firebase (todavía en curso, pero aún no hay soluciones).
Al ejecutar la siguiente consulta:
const queryByNumber = query( collectionGroup(this.firestore, 'residents'), where('cellNumber', '==', number) ); return from(getDocs(queryByNumber));Esta consulta tiene el error de:
La propiedad cellNumber no está definida en el objeto. para 'lista' @ L6
Así es como se ven las reglas en este momento.
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{path=**}/residents/{residentDoc} { allow write: if resource.data.cellNumber == request.auth.token.phone_number; allow read: if request.auth.token.phone_number == resource.data.cellNumber; //allow read; //temp permission till support fix } match /Units/{unitNumber} { allow read: if request.auth != null; function residentDoc(residentId) { return get(/databases/$(database)/documents/Units/$(unitNumber)/residents/$(residentId)) } match /pets/{petId} { allow write: if residentDoc(request.resource.data.residentId).data.cellNumber == request.auth.token.phone_number; allow read: if request.auth != null; } } } }Y esta es la estructura de datos de firestore en este momento:

Intenté cambiar mi consulta para que la array-contains en la cláusula where, pero eso no cambia mucho.
Nota: la allow read sin marcar si permite que se recuperen los datos, por lo que la consulta funciona, solo que las reglas para asegurarla no lo son.
El problema está en esta condición en sus reglas:
request.auth.token.phone_number in resource.data.cellNumber La operación in las reglas de seguridad de Firestore solo se define para mapas y listas/matrices, pero su campo cellNumber es un valor de cadena simple, que no define una operación in puede ver aquí .
Si desea verificar si el número de teléfono en el token es el mismo que el valor del campo, use == en lugar de in . Si desea probar si está en el campo, considere usar el método de matches en la cadena .
Ver también:
El problema fue otra consulta que intentaba obtener todos los datos residentes después de que se activara la inicial, lo que provocó que fallara la regla porque la segunda ya no consultaba por número de cellNumber . He cambiado las reglas para validar por UID ya que siempre se proporcionará