Al utilizar la sincronización de dispositivos (modo flexible), hay consideraciones especiales al utilizar el sistema de permisos.
For a guide to setting up Flexible Sync with common permissions models, see the Device Sync Permissions Guide.
Importante
Flexible Sync Ignores Custom Collation
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
If Device Sync (Flexible Mode) is enabled, an assigned role must be Sync compatible. If the role is not Sync compatible, but its "apply when" evaluated to true, other roles are not considered; access is denied.
Un rol no es compatible con sincronizar si se cumple alguna de las siguientes condiciones:
document_filters.readordocument_filters.writeare undefined.A document filter, insert, or delete expression:
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 sincronizables
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.
Because a Sync-enabled App assigns roles at the start of a Sync session before any specific documents are queried, you can't refer to a document or its field values in an "apply when" expression.
Expansiones compatibles con sincronización
Al utilizar Device Sync, algunas expansiones no son compatibles. La siguiente tabla especifica qué expansiones son compatibles con Sincronizar, ya sea en expresiones de “aplicar cuando” o expresiones de regla:
Expansion | Can Use in "Apply When"? | Can Use in Rule Expressions? |
|---|---|---|
Sí | Sí | |
Sí | Sí, con una consideración importante | |
No | No | |
Sí | Sí, con una consideración importante | |
No. These expansions refer to the document. App Services evaluates "apply when" expressions at session start, so there's no document to evaluate. | No. These expansions might access non-queryable fields of the document, which is not possible. | |
No | No | |
Sí | Sí | |
Sí | No. App Services expands the expansions at the start of the session, so the function would not operate on a per-document basis. | |
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 inicio de una sesión, App Services expande todas las expansiones en 'aplicar cuando', document_filters.read, y document_filters.write expresiones y almacena el resultado. Esto tiene las siguientes implicaciones:
If the value changes during a session, App Services continues to use the value as it was at the time of session start.
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.You cannot store permissions information (such as "which document IDs may this user access?") in the user object. Changes would not be re-evaluated until the next user session, and updates would cause a client reset.
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.
Configuring custom permissions for the new collection in the same draft as the new schema. Conversely, deploying a draft with permission changes after you deploy the schema will lead to a client reset, since default permissions were applied in the initial deployment.
Sistema de reglas unificadas
Prior to February 23, 2023, Device Sync (Flexible Mode) rules existed in the permissions field of the Sync configuration. These permissions now exist in the same configuration files as the non-Sync permissions.
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.
A modo de referencia, se realizan los siguientes cambios en la migración:
Move
permissions.defaultRolesto thedefault_rule.jsonfile in the data source configuration directory atdata_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.Add the following to the roles, adjusting for your use case. You can only use
trueorfalse. Generally, you probably wanttrue. Thedocument_filterswill restrict read and write access on a per-document level."read": true, "write": true, "insert": true, "delete": true, "search": true