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:
eqyneq - Comparaciones:
gt,gte,ltylte - Membresía:
inyarrayContains
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,getolist).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 etapascollection(),collectionGroup()ydatabase(). - Permisos de
allow get: Se activan en la etapadocuments(), que se trata de manera similar a una operación por lotes deget. - 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,ReplaceWithoSelect), 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 (comocollection()) que se pueda verificar con reglas.