es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , ,

Answer

  1. Avatar for 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 operador in 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:

    allow read: if request.auth.uid in resource.metadata.company;
    

    Esto comprueba si el uid del usuario autenticado existe en el array company 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étodo hasOnly() en su lugar:

    allow read: if resource.metadata.company.hasOnly(['uid': request.auth.uid, 'name': 'John']);
    

    Esto comprueba si el array company de los metadatos del recurso que se está accediendo tiene solo un objeto con uid igual al uid del usuario autenticado y name 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.

Comments are closed.