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,ltylte - 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 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,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 (comocollection()) que se pueda verificar con reglas.