Docs Menu
Docs Home
/ /
Definir permisos de acceso a datos

Filtrar consultas entrantes

Un filtro modifica una consulta entrante de MongoDB para devolver solo un subconjunto de los resultados que coincidan con la consulta. Añadir un filtro a una colección permite controlar la forma de los documentos consultados y mejorar el rendimiento de las consultas.

Los filtros añaden parámetros de consulta adicionales y omiten campos de los resultados de la consulta antes de que Atlas App Services la ejecute. Cada filtro tiene tres componentes:

App Services evalúa y aplica filtros a todas las solicitudes de MongoDB donde se aplican reglas, excepto las solicitudes de sincronización de dispositivos. Algunos ejemplos de solicitudes de MongoDB filtrables son:

  • Una consulta sobre una colección.

  • Una escritura en un documento.

Un filtro se aplica a una solicitud dada si suexpresión "aplicar cuando" se evalúa como verdadera en el contexto de dicha solicitud. Si un filtro se aplica a una solicitud, App Services fusiona la consulta o proyección del filtro con la consulta y proyección existentes de la operación solicitada.

Se pueden aplicar varios filtros a una sola solicitud.

App Services aplica filtros a la solicitud antes de enviarla a MongoDB.

Ejemplo

Una colección contiene varios millones de documentos y tiene un rol con la siguiente expresión "aplicar cuando":

{ "owner_id": "%%user.id" }

Si no se aplica ningún filtro, App Services evaluará un rol para cada documento que coincida con la consulta. Sabemos que Servicios de aplicación retendrá cualquier documento que no tenga el id del usuario como valor del campo owner_id, así que ahorramos tiempo y recursos de computación aplicando un predicado adicional de query que excluye esos documentos antes de que Servicios de aplicación evalúe cualquier rol:

Aplicar cuando
Query
Proyección

{ "%%true": true }

{ "owner_id": "%%user.id" }

{}

Puede usar filtros para optimizar las consultas, minimizar la sobrecarga de procesamiento y proteger los datos confidenciales. Los filtros son especialmente útiles para problemas transversales que afectan a algunas o todas sus consultas.

Considere usar filtros si desea un sistema centralizado para:

  • Restringir las consultas a un subconjunto de todos los documentos

  • Omitir datos confidenciales o campos no utilizados

Ejemplo

En una aplicación de votación donde algunos usuarios aceptaron compartir su voto de forma anónima, puede usar el siguiente filtro para restringir todas las consultas a un subconjunto anónimo de los datos existentes:

{
"name": "AnonymizeVotes",
"apply_when": true,
"query": {
"shareVoteAnonymous": true
},
"project": {
"_id": 0,
"age": 1,
"vote": 1
}
}
{ "_id": ObjectId(...), "name": "sarah", age: 42, "vote": "yes", "shareVoteAnonymous": true }
{ "_id": ObjectId(...), "name": "andy", age: 22, "vote": "no", "shareVoteAnonymous": true }
{ "_id": ObjectId(...), "name": "jennifer", age: 37, "vote": "yes", "shareVoteAnonymous": false }
{ "_id": ObjectId(...), "name": "rick", age: 43, "vote": "no", "shareVoteAnonymous": true }
{ "_id": ObjectId(...), "name": "tom", age: 64, "vote": "yes", "shareVoteAnonymous": false }
{ "_id": ObjectId(...), "name": "bob", age: 67, "vote": "yes", "shareVoteAnonymous": true }
{ age: 42, "vote": "yes" }
{ age: 22, "vote": "no" }
{ age: 37, "vote": "yes" }
{ age: 43, "vote": "no" }
{ age: 64, "vote": "yes" }
{ age: 67, "vote": "yes" }

Puede definir filtros para colecciones específicas en su clúster vinculado desde la interfaz de usuario de App Services o implementando archivos de configuración con Realm CLI:

Nota

Esta guía requiere una fuente de datos MongoDB Atlas vinculada.

1

Bajo Data Access En el menú de navegación de la izquierda, haga clic en Rules.

2

Seleccione la colección para la que desea configurar un filtro en el menú Rules y luego haga clic en la pestaña Filters. Haga clic en Add a Filter e introduzca un Filter Name para el nuevo filtro.

3

En el Apply When cuadro de entrada, introduzca una expresión de regla que defina cuándo se aplica el filtro a una consulta. Si la expresión se evalúa como true para una consulta entrante, App Services agrega los Filter Query parámetros a la consulta entrante.

Aplicar filtro al ingresar captura de pantalla

Importante

Atlas App Services evalúa y aplica filtros antes de leer cualquier documento, por lo que no se pueden usar expansiones de documentos de MongoDB en la expresión "Aplicar cuando" de un filtro. Sin embargo, sí se pueden usar otras expansiones %%user como, %%values y.%function

4

En el cuadro de entrada Query, especifique un documento que contenga predicados de consulta adicionales para combinarlos en la consulta entrante al aplicar el filtro. Por ejemplo, un filtro que retiene documentos con un score inferior a 20 podría usar la siguiente consulta de filtro:

{ "score": { "$gt": 20 } }
Captura de pantalla de entrada de consulta de filtro
5

En el cuadro de entrada Projection, especifique un documento que contenga un documento de proyección para fusionar con la consulta entrante cuando se aplica el filtro.

Por ejemplo, un filtro que retiene los campos career_stats y personal de los documentos podría utilizar la siguiente proyección de filtro:

{
"career_stats": 0,
"personal": 0
}
Captura de pantalla de entrada de proyección de filtro
6

Después de configurar el filtro, haga clic en Save Draft. Luego de guardar, App Services empieza a evaluar y aplicar filtros a las queries que lleguen a la colección de inmediato.

1

Para definir filtros para una colección con servicios de aplicaciones, necesita una copia local de los archivos de configuración de su aplicación.

Para extraer una copia local de la última versión de su aplicación, ejecute lo siguiente:

appservices pull --remote="<Your App ID>"

Tip

También puedes descargar una copia de los archivos de configuración de tu aplicación desde la pantalla Deploy > Export App en la Interfaz de usuario Realm.

2

Para definir o modificar roles para una colección, abra el archivo de configuración rules.json dentro del directorio de configuración de la colección.

Tip

Andamiaje de la colección

Si aún no ha definido reglas o un esquema para la colección, debe crear manualmente su directorio de configuración y schema.json:

# Create the collection's configuration directory
mkdir -p data_sources/<service>/<db>/<collection>
# Create the collection's schema file
echo '{}' >> data_sources/<service>/<db>/<collection>/rules.json

El archivo de configuración debe tener la siguiente forma general:

{
"database": "<Database Name>",
"collection": "<Collection Name>",
"roles": [],
"filters": []
}

Nota

Esta guía se centra en la creación de filters para la colección. Consulte las demás guías de configuración para aprender a definir roles y permisos, y a aplicar esquemas.

Nota

Las fuentes de datos federadas no admiten reglas ni esquemas. Solo se puede acceder a ellas desde una función del sistema.

3

Agregue un documento a la matriz filters por cada filtro que desee configurar. Los documentos de filtro tienen el siguiente formato:

{
"name": "<Filter Name>",
"apply_when": { Expression },
"query": { MongoDB Query },
"projection": { MongoDB Projection }
}
Campo
Descripción
name
string

Obligatorio. El nombre del filtro. Los nombres de los filtros son útiles para identificarlos y distinguirlos. Limitado a 100 caracteres o menos.

apply_when
object

Una expresión que determina cuándo se aplica este filtro a una operación MongoDB entrante.

Importante

Atlas App Services evalúa y aplica filtros antes de leer cualquier documento, por lo que no se pueden usar expansiones de documentos de MongoDB en la expresión "Aplicar cuando" de un filtro. Sin embargo, sí se pueden usar otras expansiones %%user como, %%values y.%function

query
object
Default: {}

Una consulta de MongoDB que App Services fusiona en la consulta existente de una operación filtrada.

Ejemplo

Un filtro retiene documentos que tengan un score por debajo de 20 usando la siguiente query:

{ "score": { "$gte": 20 } }
projection
object
Default: {}

Una proyección de MongoDB que App Services fusiona con la proyección existente de una operación filtrada.

Importante

Conflictos de proyección

Las proyecciones de MongoDB pueden ser inclusivas o exclusivas; es decir, pueden devolver solo los campos especificados o excluir los campos no especificados. Si se aplican varios filtros a una consulta, todos deben especificar el mismo tipo de proyección; de lo contrario, la consulta fallará.

Ejemplo

Un filtro retiene el campo _internal de todos los documentos utilizando la siguiente proyección:

{ "_internal": 0 }
4

Una vez que haya definido y guardado rules.json, puede enviar la configuración actualizada a su aplicación remota. La CLI de App Services implementa los filtros inmediatamente al enviarlos.

appservices push --remote="<Your App ID>"

Nota

Consideraciones de seguridad para los filtros de servicios de aplicaciones

Aunque los permisos basados en roles y los filtros pueden ocultar documentos y campos específicos dentro de una colección, existe la posibilidad de que los datos puedan ser expuestos si el sistema permite ejecutar queries para acceder a la colección.

Por ejemplo, las queries o funciones que provocan errores dependiendo de los valores almacenados en una colección (como los errores de división por cero) pueden revelar información sobre documentos, incluso si un rol o filtro impide que el usuario que realiza la query vea los documentos directamente. Los usuarios también pueden hacer inferencias sobre los datos subyacentes de otras maneras (como midiendo el tiempo de ejecución de la query, que puede verse afectado por la distribución de los datos).

Tenga en cuenta que esto es posible y audite sus patrones de acceso a datos cuando sea necesario.

Volver

Expresiones de reglas

En esta página