Overview
Al escribir datos en un dominio sincronizado mediante Sincronización Flexible, se utilizan las mismas API que al escribir en un dominio local. Sin embargo, hay algunas diferencias de comportamiento que conviene tener en cuenta.
Cuando escribe en un reino sincronizado, sus operaciones de escritura deben coincidir con ambos puntos siguientes:
La consulta de suscripción de sincronización
Los permisos en su aplicación App Services
Si intenta escribir datos que no coinciden con la consulta de suscripción y la expresión de permisos, la escritura se revierte y genera un error. CompensatingWriteException. Puede consultar los registros de App Services para ver detalles sobre por qué se denegó la escritura.
Escrituras compensatorias
Cuando un cliente intenta una escritura "ilegal" de un objeto, ocurre lo siguiente:
Debido a que el ámbito del cliente no tiene el concepto de escrituras "ilegales", la escritura inicialmente tiene éxito hasta que el ámbito resuelve el conjunto de cambios con el backend de App Services.
Tras la sincronización, el servidor aplica las reglas y los permisos. El servidor determina que el usuario no tiene autorización para realizar la escritura.
El servidor envía una operación de reversión, denominada "escritura compensatoria", al cliente.
El reino del cliente revierte la operación de escritura ilegal y lanza un
CompensatingWriteException.
Cualquier escritura del lado del cliente en un objeto entre la escritura ilegal y la escritura compensatoria correspondiente se perderá.
En la práctica, esto puede parecer como un objeto que se escribe en el reino y luego desaparece después de que el servidor envía la escritura compensatoria al cliente.
Cuando CompensatingWriteException se lanza un, se incluye un enumerable de objetos CompensatingWriteInfo. Cada CompensatingWriteInfo objeto contiene propiedades que describen el tipo de objeto, su clave principal y el motivo por el que el servidor realizó la escritura compensatoria.
Cómo determinar qué datos se sincronizan
La regla que controla qué datos puedes escribir en un reino sincronizado es la intersección de la configuración de sincronización de dispositivos, los permisos de App Services y la consulta de suscripción de sincronización flexible que utilizas cuando abres el reino.
Veamos un ejemplo de cómo funcionan juntos esos componentes:
Configuración de sincronización del dispositivo
La sincronización del dispositivo está configurada con los siguientes campos consultables:
_id(siempre incluido)ownerId
Permisos de servicios de aplicaciones
La aplicación Servicios de aplicaciones tiene permisos configurados para permitir a los usuarios leer y escribir solo sus propios datos:
{ "name": "owner-read-write", "apply_when": {}, "document_filters": { "read": { "ownerId": "%%user.id" }, "write": { "ownerId": "%%user.id" } }, "read": true, "write": true }
Suscripción de sincronización flexible
La suscripción de sincronización flexible en el cliente establece que el objeto debe tener un valor Status de "completado":
realm.Subscriptions.Update(() => { var completedItemsQuery = realm .All<MyTask>() .Where(i => i.Status == "completed"); realm.Subscriptions .Add(completedItemsQuery, new SubscriptionOptions() { Name = "completedItems" }); });
El resultado: ¿Qué datos se sincronizan?
La combinación de la consulta de suscripción y los permisos significa que el reino sincronizado solo sincroniza objetos donde:
El
ownerIdcoincide con eluser.iddel usuario que inició sesión (de los permisos)El valor de la propiedad
Statuses "completado" (de la consulta de suscripción)
Cualquier objeto de la colección Atlas donde el valor ownerId no coincida con el valor user.id del usuario conectado, o el valor de la propiedad Status no esté "completado", no se puede sincronizar con este dominio. Al intentar escribir un objeto de este tipo, se genera un error CompensatingWriteException.
Para más información
Para obtener más información sobre errores de permiso denegado, compensación de errores de escritura y otros tipos de errores de sincronización de dispositivos, consulte Errores de sincronización en la documentación de App Services.
Para obtener más información sobre cómo configurar permisos para su aplicación, consulte Permisos basados en roles y la Guía de permisos de sincronización de dispositivos en la documentación de App Services.