Esto es muy contrario a la intuición, pero ¿la biblioteca de JavaScript de alguna manera no es totalmente compatible con las reglas de seguridad de Firestore?
Asumiría que no hay conexión entre la sintaxis de las reglas de seguridad y las solicitudes del lado del cliente.
Sin embargo, obtengo este comportamiento en un fragmento de las reglas de seguridad de Firestore:
// Works fine in tests with test suite // Does NOT work with javascript library request.auth.token.roles[userRole].hasAny([ "admin", "owner" ]) // Works fine in tests with test suite // Also works fine with javascript library request.auth.token.roles[userRole] in ([ "admin", "owner" ])Editar: el error en el emulador es muy descriptivo:
función no encontrada error: nombre: [hasany]
Entonces, básicamente, parece que la biblioteca de JavaScript no es compatible con las reglas de seguridad.
Estoy usando la última versión de todo:
hasAny es una construcción de las reglas de seguridad de Firestore y no existe en las matrices de JavaScript regulares.
Su solución in JavaScript es interesante, ya que probablemente habría usado some() para esto.
Obviamente fue mi culpa.
Este:
request.auth.token.roles[userRole] Devuelve una String . hasAny es una función de la interfaz List . Estaba pasando todas las pruebas porque en los simulacros el valor se mapeaba como una matriz. Al llamar desde el cliente, las reglas fallaron lógicamente.