Permissões compatíveis com o Device Sync
Nesta página
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.
Funções compatíveis com 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
oudocument_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 superiorwrite
ou nível de campo não são literais booleanos (true
oufalse
).As permissões de nível de campo são especificadas para o campo
_id
.
Expressão compatíveis com sincronização
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".
Expansões compatíveis com sincronização
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 | Sim, com uma consideração importante | |
No | No | |
Sim | Sim, com uma consideração importante | |
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.
Alterações de permissão
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:
Você atualizou a configuração do conjunto de dados para modificar as regras.
Suas regras fazem referência a dados personalizados do usuário para determinar as permissões dinamicamente, e o valor desses dados personalizados do usuário foi alterado desde a última sessão de sincronização.
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.
Sistema de regras unificadas
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 arquivodefault_rule.json
no diretório de configuração do conjunto de dados emdata_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 emdata_sources/<data-source-name>/<database-name>/<collection-name>/
.Renomear
defaultRoles
pararoles
.Renomear
applyWhen
paraapply_when
.Mova sincronização
read
ewrite
paradocument_filters.read
edocument_filters.write
. Certifique-se de quedocument_filters.read
edocument_filters.write
estejam definidos.Adicione o seguinte às funções, ajustando para seu caso de uso. Você só pode usar
true
oufalse
. Geralmente, você provavelmente quertrue
. Adocument_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