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

Permisos compatibles con la sincronización de dispositivos

Al utilizar la sincronización de dispositivos (modo flexible), hay consideraciones especiales al utilizar el sistema de permisos.

Para obtener una guía sobre cómo configurar la sincronización flexible con modelos de permisos comunes, consulte la Guía de permisos de sincronización de dispositivos.

Importante

La sincronización flexible ignora la intercalación personalizada

La sincronización flexible ignora cualquier personalización Intercalación que haya configurado en una colección de MongoDB en Atlas. En cambio, las colecciones sincronizadas siempre usan {locale: "simple"} al evaluar suscripciones o permisos de sincronización.

Si la sincronización de dispositivos (modo flexible) está habilitada, el rol asignado debe ser compatible con la sincronización. Si el rol no es compatible con la sincronización, pero su valor de "aplicar cuando" es verdadero, no se consideran otros roles y se deniega el acceso.

Un rol no es compatible con Sync si se cumple alguna de las siguientes condiciones:

  • document_filters.read o document_filters.write no están definidos.

  • Una expresión de filtro, inserción o eliminación de documentos:

    • Hace referencia a un campo que no es un campo consultable

    • Utiliza una expansión distinta de %%true, %%false, %%values, %%environment o %%user

    • Utiliza el operador %function

  • Los permisos de nivel superior read, nivel superior write, o de campo no son literales booleanos (true o false).

  • Los permisos a nivel de campo se especifican para el campo _id.

Cuando la Sincronización de dispositivos está habilitada, las expresiones solo pueden hacer referencia a los campos consultables de su modelo de datos. Si un rol hace referencia a cualquier otro campo, deja de ser compatible con la sincronización y no se puede usar con ella.

Debido a que una aplicación habilitada para sincronización asigna roles al inicio de una sesión de sincronización antes de que se consulten documentos específicos, no se puede hacer referencia a un documento ni a sus valores de campo en una expresión "aplicar cuando".

Al usar Device Sync, algunas expansiones no son compatibles. La siguiente tabla especifica qué expansiones son compatibles con Sync en las expresiones "aplicar cuando" o de regla:

Expansión
¿Se puede utilizar en "Aplicar cuando"?
¿Se puede utilizar en expresiones de reglas?

No

No

No. Estas expansiones se refieren al documento. App Services evalúa las expresiones "aplicar cuando" al iniciar la sesión, por lo que no hay ningún documento que evaluar.

No. Estas expansiones podrían acceder a campos no consultables del documento, lo cual no es posible.

No

No

No. App Services expande las expansiones al inicio de la sesión, por lo que la función no operaría por documento.

Sí.

Importante

App Services provoca un reinicio del cliente si se produjo algún cambio en el rol desde la sesión anterior.

Al iniciar una sesión, App Services expande todas las expansiones en las expresiones "aplicar cuando", document_filters.read y document_filters.write y almacena el resultado. Esto implica lo siguiente:

  • Si el valor cambia durante una sesión, App Services continúa usando el valor tal como estaba en el momento del inicio de la sesión.

  • En la siguiente sesión, si el valor es diferente al que tenía al inicio de esta sesión, App Services provocará un reinicio del cliente.

  • No se puede usar el %function operador en las reglas de lectura y escritura. Las funciones no operarían por documento.

  • No se puede almacenar información de permisos (como "¿a qué ID de documento puede acceder este usuario?") en el objeto de usuario. Los cambios no se reevaluarían hasta la siguiente sesión de usuario y las actualizaciones provocarían el reinicio del cliente.

Si los permisos de un usuario han cambiado desde la última sesión de sincronización, Sync activa un restablecimiento del cliente y vuelve a descargar todos los datos con los nuevos permisos aplicados.

Los permisos de un usuario pueden cambiar en las siguientes situaciones:

No se activará un restablecimiento de cliente en los siguientes casos:

  • Añadir una nueva colección a un esquema de App Services y definir permisos para el nuevo espacio de nombres o usar roles predeterminados. Esto no activará el restablecimiento del cliente, ya que los permisos no se han aplicado previamente.

  • Configurar permisos personalizados para la nueva colección en el mismo borrador que el nuevo esquema. Por el contrario, implementar un borrador con cambios de permisos después de implementar el esquema provocará un reinicio del cliente, ya que se aplicaron los permisos predeterminados en la implementación inicial.

Antes del de febrero 23 2023de, las reglas de permissions Sincronización de dispositivos (Modo flexible) existían en el campo de la configuración de sincronización. Estos permisos ahora se encuentran en los mismos archivos de configuración que los permisos sin sincronización.

Al importar una app configurada para el sistema de permisos antiguo, App Services migra automáticamente los permisos al nuevo sistema unificado de reglas. No debería ser necesario migrar aplicaciones manualmente. Si tienes una configuración de aplicación antigua, puedes importar y luego reexportar la configuración migrada.

Como referencia, en la migración se producen los siguientes cambios:

  • Mueva permissions.defaultRoles al archivo default_rule.json en el directorio de configuración de la fuente de datos en data_sources/<data-source-name>/.

  • Mueva cualquier regla específica de la colección al archivo rules.json en los directorios de configuración de colección respectivos en data_sources/<data-source-name>/<database-name>/<collection-name>/.

  • Cambie el nombre de defaultRoles a roles.

  • Cambie el nombre de applyWhen a apply_when.

  • Mueva la sincronización read y write a document_filters.read y document_filters.write. Asegúrese de que tanto document_filters.read como document_filters.write estén definidos.

  • Agregue lo siguiente a los roles, adaptándolo a su caso de uso. Solo puede usar true o false. Generalmente, probablemente desee true. El document_filters restringirá el acceso de lectura y escritura a nivel de documento.

    "read": true,
    "write": true,
    "insert": true,
    "delete": true,
    "search": true

Volver

Filtrar consultas entrantes

En esta página