ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Menu Docs

Permissões compatíveis com o Device Sync

Ao usar a sincronização de dispositivos (modo flexível), há considerações especiais ao usar o sistema de permissões.

Para obter um guia sobre como configurar o Sincronização Flexível com modelos de permissões comuns, consulte o Device Sync Permissions Guide (Guia de permissões do Device Sync).

Importante

O Flexible Sync ignora o agrupamento personalizado

O Flexible Sync ignora qualquer agrupamento personalizado que você possa ter configurado em uma collection do MongoDB no Atlas. Em vez disso, as coleções sincronizadas sempre usam o {locale: "simple"} ao avaliar assinaturas ou permissões de sincronização.

Se o Realm Mobile Sync (modo flexível) estiver ativado, uma função atribuída deverá ser compatível com a sincronização. Se a função não for compatível com a sincronização, mas seu "aplicar quando" for avaliado como verdadeiro, outras funções não serão consideradas; o acesso é negado.

Uma role não será compatível com a sincronização se alguma das seguintes condições for verdadeira:

  • document_filters.read ou document_filters.write são indefinidos.

  • Uma expressão de filtro, inserção ou exclusão de documento:

    • Referencia um campo que não é um campo de query

    • Utiliza uma expansão diferente de %%true, %%false, %%values, %%environment ou %%user

    • Utiliza o operador %function

  • As permissões de nível superior read, nível superior write ou nível de campo não são literais booleanos (true ou false).

  • As permissões de nível de campo são especificadas para o campo _id .

Quando o Realm Mobile Sync está habilitado, a expressão só pode se referir ao campo de query do seu Modelo de dados Realm. Se uma função se referir a quaisquer outros campo, ela se tornará incompatível com a sincronização e não poderá ser usada com o Realm Mobile Sync.

Como um aplicativo habilitado para Sync atribui funções no início de uma sessão de sincronização antes de qualquer documento ser query, você não pode fazer referência a um documento ou a seus valores de campo em uma expressão "aplicar quando".

Ao usar o Realm Mobile Sync, algumas expansões não são suportadas. A tabela a seguir especifica quais expansões são compatíveis com a sincronização na expressão "aplicar quando" ou de expressão de regra:

Expansão
pode usar em "Aplicar quando"?
pode usar em expressões de regras?

Sim

Sim

Sim

No

No

Sim

Não. Essas expansões referem-se ao documento. O App Services avalia expressões "aplicar quando" no início da sessão, então não há nenhum documento para avaliar.

Não. Essas expansões podem acessar campos não consultáveis do documento, o que não é possível.

No

No

Sim

Sim

Sim

Não. O App Services expande as expansões no início da sessão, portanto, a função não operaria por documento.

Sim

Sim

Sim

Sim.

Sim

Sim

Importante

O App Services faz com que um cliente seja redefinido se houver alguma alteração na role desde a sessão anterior.

No início de uma sessão, o App Services expande todas as expansões nas expressões "aplicar quando", document_filters.read e document_filters.write e armazena o resultado. Isso tem as seguintes implicações:

  • Se o valor for alterado durante uma sessão, o App Services continuará a usar o valor como no momento do início da sessão.

  • Na próxima sessão, se o valor for diferente do que era no início dessa sessão, o App Services fará com que ocorra um reinício do cliente.

  • Você não pode usar o operador %function em regras de leitura e gravação. As funções não operariam por documento.

  • Você não pode armazenar informações de permissões (como "quais ID de documento esse usuário pode acessar?") no objeto de usuário. As alterações não seriam reavaliadas até a próxima sessão do usuário, e as atualizações causariam um reinício do cliente.

Se as permissões de um usuário tiverem sido alteradas desde a última sessão de sincronização, Atlas Triggers um reinício do cliente e baixará novamente todos os dados com as novas permissões aplicadas.

As permissões de um usuário podem mudar nas seguintes situações:

Um reinício do cliente não será acionado nos seguintes casos:

  • Adicionar uma collection a um App Services Schema e definir permissões para o novo namespace ou usar roles padrão. Isso não trigger uma reinício do cliente porque as permissões não foram aplicadas anteriormente.

  • Configurar permissões personalizadas para a nova collection no mesmo rascunho do novo esquema. Por outro lado, a implantação de um rascunho com alterações de permissão após a implantação do esquema levará a um reinício do cliente, pois as permissões padrão foram aplicadas na implantação inicial.

Antes de 23 de fevereiro de 2023, existiam regras do Realm Mobile Sync (modo flexível) no campo permissions da configuração de sincronização. Essas permissões agora existem nos mesmos arquivos de configuração que as permissões não sincronizadas.

Ao importar um aplicativo configurado para o sistema de permissões antigo, o App Services migra automaticamente as permissões para o novo sistema de regras unificado. Não é necessário migrar aplicativos manualmente. Se você tiver uma configuração de aplicativo antiga, poderá importar e, em seguida , exportar novamente a configuração migrada.

Para referência, as seguintes alterações ocorrem na migração:

  • Mova permissions.defaultRoles para o arquivo default_rule.json no diretório de configuração do conjunto de dados em data_sources/<data-source-name>/.

  • Mova quaisquer regras específicas da collection para o arquivo rules.json nos respectivos diretórios de configuração da collection em data_sources/<data-source-name>/<database-name>/<collection-name>/.

  • Renomear defaultRoles para roles.

  • Renomear applyWhen para apply_when.

  • Mova sincronização read e write para document_filters.read e document_filters.write. Certifique-se de que document_filters.read e document_filters.write estejam definidos.

  • Adicione o seguinte às funções, ajustando para seu caso de uso. Você só pode usar true ou false. Geralmente, você provavelmente quer true. A document_filters restringirá o acesso de leitura e gravação em um nível por documento.

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