Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Gravar em um Realm sincronizado - .NET SDK

Nesta página

  • Visão geral
  • Compensação de escritas
  • Determinando quais dados são sincronizados
  • Configuração do Device Sync
  • Permissões do App Services
  • Assinatura de Flexible Sync
  • O resultado: quais dados são sincronizados?
  • Para mais informações

Ao gravar dados em um domínio sincronizado usando o Flexible Sync, você usa as mesmas APIs que usa ao gravar em um domínio local. No entanto, há algumas diferenças de comportamento que devem ser levadas em conta.

Quando você escreve em um Realm sincronizado, suas operações de escrita devem corresponder aos dois itens a seguir:

  • A query de assinatura de sincronização

  • As permissões em seu App Services App

Se você tentar gravar dados que não correspondem à query de assinatura e à expressão de permissões, a gravação será revertida e lançará uma CompensatingWriteException. Você pode examinar os registros do App Services para ver detalhes sobre o motivo pelo qual a gravação foi negada.

Quando um cliente tenta uma gravação "ilegal" de um objeto, ocorre o seguinte:

  1. Como o Realm do cliente não tem nenhum conceito de gravações "ilegais", a gravação inicialmente é bem-sucedida até que o Realm resolva o conjunto de alterações com o backend do App Services.

  2. Após a sincronização, o servidor aplica as regras e permissões. O servidor determina que o usuário não tem autorização para realizar a gravação.

  3. O servidor envia uma operação de reversão, chamada de "escrita compensatória", de volta ao cliente.

  4. O realm do cliente reverte a operação de escrita ilegal e lança um CompensatingWriteException.

Qualquer escrita do lado do cliente em um objeto entre a escrita ilegal e a escrita compensatória correspondente será perdida.

Na prática, isso pode parecer um objeto sendo gravado no Realm e desaparecer depois que o servidor enviar a gravação compensatória de volta ao cliente.

Quando um CompensatingWriteException é lançado, ele inclui um enumerável de objetos CompensatingWriteInfo . Cada objeto CompensatingWriteInfo contém propriedades que descrevem o tipo de objeto, sua chave primária e a razão pela qual o servidor executou a gravação compensatória.

A regra que controla quais dados você pode gravar em um Realm sincronizado é a interseção da configuração do Realm Mobile Sync, das permissões do App Services e da query de assinatura do Flexible Sync que você usa quando abre o Realm.

Vejamos um exemplo de como esses componentes trabalham juntos:

O Realm Mobile Sync é configurado com os seguintes campo de query:

  • _id (Sempre incluído)

  • ownerId

O App Services App tem permissões configuradas para permitir que os usuários leiam e escrevam somente seus próprios dados:

{
"name": "owner-read-write",
"apply_when": {},
"document_filters": {
"read": { "ownerId": "%%user.id" },
"write": { "ownerId": "%%user.id" }
},
"read": true,
"write": true
}

A assinatura de Flexible Sync no cliente declara que o objeto deve ter um valor Status de "concluído":

realm.Subscriptions.Update(() =>
{
var completedItemsQuery = realm
.All<MyTask>()
.Where(i => i.Status == "completed");
realm.Subscriptions
.Add(completedItemsQuery,
new SubscriptionOptions() { Name = "completedItems" });
});

A combinação da query de assinatura e das permissões significa que o Realm sincronizado sincroniza apenas objeto em que:

  • O ownerId corresponde ao user.id do usuário conectado (a partir das permissões)

  • O valor da propriedade Status é "concluído" (da query de assinatura)

Qualquer objeto na coleção Atlas em que o ownerId não corresponda ao user.id do usuário conectado ou o valor da propriedade Status não "concluído" não possa ser sincronizado com esse domínio. Uma tentativa de gravar tal objeto lança um CompensatingWriteException.

Para saber mais sobre erros de permissão negada, erros de gravação compensatórios e outros tipos de erro do Device Sync , consulte Erros de sincronização na documentação do Atlas App Services .

Para saber mais sobre como configurar permissões para seu aplicativo, consulte Permissões baseadas em funções e o Guia de permissões deDevice Sync na documentação do Atlas App Services .

Voltar

Configurar e abrir um domínio sincronizado