Reglas de seguridad para operaciones de canalización

Las reglas de operaciones de canalización te permiten hacer coincidir las capacidades de filtrado del motor de reglas existente. Si bien las operaciones de canalización ofrecen un amplio conjunto de funciones, el motor de reglas se limita a reconocer filtros simples para garantizar la satisfacción y la seguridad de las consultas.

Requisitos de edición y modo

Este documento se aplica a la edición Enterprise de Firestore en modo nativo.

Expresiones de filtro admitidas

Para que una búsqueda esté restringida por tus reglas, debe usar operadores de comparación estándar con constantes. El motor de reglas reconoce los siguientes tipos de filtros:

  • Igualdad y desigualdad: eq, neq.
  • Comparaciones: gt, gte, lt y lte
  • Membresía: in, arrayContains.

Estos son algunos ejemplos:

  • where(eq("foo", 2))
  • where(lt("foo", 2))
  • documents("/user/1", "/user/2").where(...)

Propiedades de la solicitud

Puedes seguir usando el objeto request para validar la autenticación y el contexto de la consulta, aunque algunas propiedades disponibles en las consultas estándar no se admiten en las canalizaciones.

Propiedades admitidas

El nuevo motor sigue admitiendo las siguientes propiedades:

  • request.auth: Accede a los datos del UID y el token del usuario.
  • request.method: Identifica la operación (por ejemplo, get, list).
  • request.path: Es la ruta de acceso al recurso al que se accede.
  • request.time: Es la marca de tiempo del servidor de la solicitud.

Propiedades no admitidas

Las propiedades de request.query, como limit, offset y orderBy, no son compatibles con las verificaciones de reglas de canalizaciones debido a la complejidad de determinar estos valores en consultas de varias etapas.

Control y permisos de la etapa de canalización

Existen diferentes etapas de la canalización que se asignan a operaciones específicas y detalladas en las reglas de seguridad:

  • Permisos de allow list: Se activan en las etapas collection(), collectionGroup() y database().
  • Permisos de allow get: Se activan en la etapa documents(), que se trata de manera similar a una operación por lotes de get.
  • Etapas de modificación de campos: Las reglas solo operan en los datos almacenados y no en los valores derivados. Si una canalización incluye etapas que modifican campos (por ejemplo, AddFields, ReplaceWith, Select), el motor de reglas deja de aplicar restricciones de filtro después de que se encuentra esa etapa.
  • Etapa de literales: La etapa literals() no lee datos de la base de datos, pero puede generar costos. Para evitar abusos, debe combinarse con otra etapa (como collection()) que se pueda verificar con reglas.