Reglas de seguridad para operaciones de canalización

El objetivo principal de la compatibilidad con las reglas de consultas de Pipeline es igualar las funciones de filtrado del motor de reglas existente. Si bien las consultas de Pipeline 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.

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 y neq
  • Comparaciones: gt, gte, lt y lte
  • Membresía: in y arrayContains

Estos son algunos ejemplos:

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

Propiedades de las solicitudes

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 o list).
  • request.path: Es la ruta de acceso del recurso.
  • 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 Pipelines debido a la complejidad de determinar estos valores en consultas de varias etapas.

Control y permisos de etapas de canalizaciones

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