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.
Roles compatibles con 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.readodocument_filters.writeno 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,%%environmento%%userUtiliza el operador
%function
Los permisos de nivel superior
read, nivel superiorwrite, o de campo no son literales booleanos (trueofalse).Los permisos a nivel de campo se especifican para el campo
_id.
Expresiones compatibles con la sincronización
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".
Expansiones compatibles con sincronización
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? |
|---|---|---|
Sí | Sí | |
Sí | Sí, con una consideración importante | |
No | No | |
Sí | Sí, con una consideración importante | |
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 | |
Sí | Sí | |
Sí | No. App Services expande las expansiones al inicio de la sesión, por lo que la función no operaría por documento. | |
Sí | Sí | |
Sí | Sí. | |
Sí | 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
%functionoperador 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.
Cambios de permisos
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:
Actualizó la configuración de la fuente de datos para modificar las reglas.
Sus reglas hacen referencia a datos de usuario personalizados para determinar permisos de forma dinámica, y el valor de esos datos de usuario personalizados ha cambiado desde la última sesión de sincronización.
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.
Sistema de reglas unificadas
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.defaultRolesal archivodefault_rule.jsonen el directorio de configuración de la fuente de datos endata_sources/<data-source-name>/.Mueva cualquier regla específica de la colección al archivo
rules.jsonen los directorios de configuración de colección respectivos endata_sources/<data-source-name>/<database-name>/<collection-name>/.Cambie el nombre de
defaultRolesaroles.Cambie el nombre de
applyWhenaapply_when.Mueva la sincronización
readywriteadocument_filters.readydocument_filters.write. Asegúrese de que tantodocument_filters.readcomodocument_filters.writeestén definidos.Agregue lo siguiente a los roles, adaptándolo a su caso de uso. Solo puede usar
trueofalse. Generalmente, probablemente deseetrue. Eldocument_filtersrestringirá el acceso de lectura y escritura a nivel de documento."read": true, "write": true, "insert": true, "delete": true, "search": true