Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Define Data Access Permissions

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.

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.

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.read or document_filters.write are 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, %%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.

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.

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?

No

No

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

No. App Services expands the expansions at the start of the session, so the function would not operate on a per-document basis.

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 %function operador 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.

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.

  • 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.

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.defaultRoles to the default_rule.json file in the data source configuration directory at 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.

  • Add the following to the roles, adjusting for your use case. You can only use true or false. Generally, you probably want true. The document_filters will restrict read and write access on a per-document level.

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

Volver

Filtrar consultas entrantes

En esta página