Menu Docs
Página inicial do Docs
/ /
Serviços Atlas App
/

Exemplos de role de acesso a dados

O Atlas App Services determina se uma função se aplica avaliando a expressão "aplicar quando" que você define para cada função.

Esta seção contém exemplos de expressão "aplicar quando" para cenários comuns em que você não está usando o Realm Mobile Sync. Para obter orientação sobre cenários comuns do Realm Mobile Sync, consulte o Guia de permissões do Realm Mobile Sync.

Para adicionar uma expressão a uma role, encontre o cenário que mais se aproxima do seu caso de uso e, em seguida, copie e cole o modelo fornecido na role. Talvez seja necessário modificar os valores do espaço reservado (denotados por <angle brackets>) no modelo para corresponder à sua collection ou, de outra forma, adaptar o modelo para atender às suas necessidades.

Observação

Você também pode usar as expressões "aplicar quando" nesta página para serviços externos.

Essa expressão é avaliada como true se o valor id exclusivo do usuário ativo corresponder ao valor do campo especificado. "Campo ID do proprietário" refere-se a qualquer campo em seu esquema que represente um relacionamento com um objeto de usuário.

{
"<Owner ID Field>": "%%user.id"
}

Essa expressão é avaliada como true se o valor id exclusivo do usuário ativo corresponder a um ou mais valores no campo de array especificado.

{
"<Array Field>": "%%user.id"
}

Essa expressão é avaliada como true se o usuário ativo tiver qualquer endereço de e-mail listado em seu objeto de usuário interno.

{
"%%user.data.email": { "%exists": true }
}

Esta expressão é avaliada como true se o endereço de e-mail do usuário ativo corresponder ao endereço de e-mail especificado.

{
"%%user.data.email": "<Email Address>"
}

Esta expressão é avaliada como true se o endereço de e-mail do usuário ativo corresponder ao valor do campo especificado.

{
"%%root.email": "%%user.data.email"
}

Essa expressão é avaliada como true se o endereço de e-mail do usuário ativo corresponder a um ou mais valores de string no campo de array especificado.

{
"<Array Field>": "%%user.data.email"
}

Essa expressão é avaliada como true se a função isAuthorizedUser retornar true quando passou o valor de ID do usuário ativo.

Observação

Você pode chamar qualquer Função de Realm a partir de uma expressão JSON usando o operador %function .

{
"%%true": {
"%function": {
"name": "isAuthorizedUser",
"arguments": ["%%user.id"]
}
}
}

O App Services usa a configuração de permissões de uma função para determinar se o usuário ativo pode inserir ou excluir um documento, bem como quais campos do documento ele pode ler e escrever.

Esta seção contém modelos que definem funções para cenários comuns. Para aplicar um conjunto de permissões a uma função, encontre o cenário que mais se aproxima do seu caso de uso. Atualize as permissões de campo, as permissões do documento e/ou a tabela de permissões da função para corresponder à captura de tela fornecida ou copie e cole o modelo fornecido na configuração do modo avançado da coleção. Certifique-se de modificar quaisquer valores de espaço reservado (denotados por <angle brackets>) no modelo para atender às suas necessidades.

Para permitir que uma função leia qualquer campo, defina o campo read no nível do documento como true e o campo write como false.

Uma role com permissão para ler todos os campos do documento
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": <boolean>,
"delete": <boolean>,
"read": true,
"write": false
}

Para permitir que uma função leia ou grave qualquer campo, defina o campo write no nível do documento como true. As gravações em nível de documento exigem permissão de leitura, portanto, a role poderá ler todos os campos.

Um role com permissão para ler e gravar todos os campos do documento
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": <boolean>,
"delete": <boolean>,
"write": true,
}

Para permitir que uma função leia todos os campos, defina o campo read no nível do documento como true e o campo write como false. Para especificar um campo no qual a role pode gravar, defina o campo write como true no documento de configuração do campo, que está incorporado no documento fields .

Um role com permissão para escrever em campos específicos
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": <boolean>,
"delete": <boolean>,
"read": true,
"write": false,
"fields": {
"<Field Name>": { "write": true },
...
}
}

Para permitir que uma função leia ou grave qualquer campo, defina o campo write no nível do documento como true. As gravações em nível de documento exigem permissão de leitura, portanto, a role poderá ler todos os campos.

Para evitar que a role insira novos documentos, defina o campo insert no nível do documento como false.

Uma função que não tem permissão para inserir novos documentos
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": false,
"delete": <boolean>,
"write": true,
}

Para permitir que uma função grave em qualquer campo, exceto naqueles que você especificar, defina o campo read no nível do documento como true. Defina os campos write de nível de campo correspondentes como false e os campos read como true no documento fields . Por último, defina o campo additional_fields.write como true.

Uma função com permissão para escrever em alguns campos, mas não em todos
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": <boolean>,
"delete": <boolean>,
"read": true,
"fields": {
"<Field Name>": {
"read": true,
"write": false
},
...
},
"additional_fields": { "write": true }
}

Os casos de uso descritos nesta seção exigem que você use funcionalidades avançadas que não são suportadas pelo editor de regras de collection padrão na Realm UI. Para usar esse modelo, converta para o modo avançado ou importe uma configuração de collection com o App Services CLI.

Para permitir que uma função insira novos documentos, mas impedir que eles leiam ou modifiquem quaisquer dados, defina insert como true e defina o valor do nível do documento write para uma expressão de regra que avalia para true somente se o documento não existia antes da operação.

{
"name": "insertOnly",
"apply_when": <JSON Expression>,
"delete": false,
"insert": true,
"write": {
"%%prevRoot": { "%exists": false }
},
"additional_fields": {}
}

Observação

Você deve especificar uma expressão JSON para write para impedir que os usuários leiam os dados. Para inserir um documento, uma função também deve ter permissão de escrita para todos os campos do documento; no entanto, definir write diretamente para true também daria permissão de leitura ao role. A expressão JSON garante que o role tenha permissão de leitura apenas para a inserção inicial do documento.

Para permitir que uma função leia ou grave alguns, mas não todos os campos de um documento incorporado, adicione documentos incorporados que correspondam ao caminho do campo incorporado até o documento fields .

{
"name": "canReadEmbeddedField",
"apply_when": {},
"delete": true,
"insert": true,
"fields": {
"someEmbeddedDocument": {
"fields": {
"someEmbeddedField": {
"read": true,
"write": true
}
}
}
},
"additional_fields": {}
}

Observação

O App Services aplica quaisquer permissões read e write definidas para um determinado campo a todos os campos incorporados que o campo contém, independentemente de quaisquer permissões definidas para esses campos.

Voltar

Configurar regras avançadas