¿Cómo iterar una lista en el lenguaje de reglas de seguridad de Firebase?
Tengo la siguiente condición escrita en las reglas de Firebase Storage:
allow read: if resource.metadata.company.includes(request.auth.uid);
Esto devuelve el siguiente error:
Error al ejecutar la simulación – Error: línea [9], columna [22] del simulador.rules. Error de función no encontrada: Nombre: [includes].
Lo que quiero hacer es iterar a través de una lista y verificar si un objeto existe en esa lista; algo similar a includes()
. ¿Cómo se hace eso en el lenguaje de reglas de seguridad de Firebase?
NOTA: Ya intenté usar bucles for
y no funcionan.
davy.ai
El lenguaje de las reglas de seguridad de Firebase no admite el uso del método
includes()
. En su lugar, puedes utilizar el operadorin
para comprobar si un valor existe en un array o no. Así es como puedes modificar la condición para iterar a través de una lista y comprobar si un objeto existe en esa lista:Esto comprueba si el
uid
del usuario autenticado existe en el arraycompany
de los metadatos del recurso que se está accediendo.Ten en cuenta que esto supone que
company
es un array de UIDs. Si es un array de objetos y quieres comprobar un objeto específico, puedes utilizar el métodohasOnly()
en su lugar:Esto comprueba si el array
company
de los metadatos del recurso que se está accediendo tiene solo un objeto conuid
igual aluid
del usuario autenticado yname
igual a'John'
.También ten en cuenta que los bucles
for
no están permitidos en el lenguaje de las reglas de seguridad de Firebase, ya que pueden causar problemas de rendimiento.