Couchbase Mobile

Aumente sua função de sincronização com funções no Couchbase Sync Gateway

As funções no Sync Gateway são frequentemente ignoradas porque parecem mais complexas de usar do que os usuários e os canais. No entanto, elas fornecem uma camada adicional de abstração e podem simplificar muito seu modelo de dados. Veja o exemplo de um aplicativo para compartilhar avaliações de restaurantes por cidade. Usuários diferentes podem ter privilégios diferentes, como moderadores e usuários convidados. Neste tutorial, você configurará o Função de sincronização para permitir que usuários autenticados desse aplicativo aprovem, publiquem avaliações ou atribuam funções a outros usuários.

No total, haverá 3 tipos de funções no aplicativo:

  • nível 1: usuários com o nível 1 pode publicar avaliações, mas elas devem ser aceitas por usuários com a função nível 3 (ou seja, moderadores) sejam públicos.
  • nível 2Usuários podem publicar comentários sem a necessidade de validação dos moderadores. Isso significa que eles podem publicar um comentário sem precisar de aprovação.
  • nível 3Os usuários podem aprovar ou rejeitar as avaliações. Vamos começar!

Baixar o Sync Gateway

Faça o download do Sync Gateway e descompacte o arquivo:

https://www.couchbase.com/downloads?family=sync-gateway

Você encontrará o binário do Sync Gateway no diretório caixa e exemplos de arquivos de configuração na pasta exemplos pasta. Copie o users-role.json na raiz do seu projeto:

Na próxima seção, você atualizará o arquivo de configuração para criar usuários e funções.

Edição do arquivo de configuração

Em sync-gateway-config.jsonatualize o objeto db para leitura:

Algumas coisas estão acontecendo acima:

  1. Você cria o usuário jens com o nível 1 função.
  2. Você cria o usuário andy com o nível 2 função.
  3. Você cria o usuário William sem nenhuma função.
  4. Você cria o usuário traun com o nível 3 função.
  5. Você define as 3 funções. Assim como os usuários, as funções devem ser criadas explicitamente na API REST do Admin ou no arquivo de configuração.

Observação sobre a criação de funções

A maneira mais fácil de criar funções é no arquivo de configuração, como você fez acima.

Outra maneira de criar funções é por meio da API REST do administrador. Desde que você exponha um ponto de extremidade para criar essas funções a partir do aplicativo, é possível criar funções dinamicamente enviando uma solicitação para o servidor do aplicativo (setas azuis), que criará a função e enviará de volta um 201 Created se tiver sido bem-sucedido (setas verdes).

Na próxima seção, você adicionará a função Sync para lidar com operações de gravação e leitura para os três tipos diferentes de documentos (restaurante, revisão, perfil).

Adição da função Sync

Funções e usuários podem receber acesso a canais. Os usuários podem receber funções e herdar qualquer acesso ao canal para essas funções.

O acesso ao canal determina a segurança de leitura de um usuário. A segurança de gravação também pode ser baseada em canais (usando requireAccess), mas também pode ser baseado em usuário/função (requireUser e requireRole), ou conteúdo do documento (usando lançar).

O acesso de leitura e gravação aos documentos é independente. Na verdade, o acesso de gravação é totalmente controlado pela sua função de sincronização: a menos que a função de sincronização rejeite a revisão, um cliente pode modificar qualquer documento. Todas as funções require* atuam como validadores, mas também como APIs de acesso de gravação.

É muito comum ver a função de sincronização criar muitos e muitos canais. Isso é absolutamente normal. No entanto, pode ser complicado atribuir cada usuário a um canal. Em vez disso, você pode usar uma função!

Mais uma vez, os usuários podem receber funções e herdar qualquer acesso ao canal para essas funções.

Isso significa que você pode conceder a um usuário acesso a vários canais simplesmente atribuindo uma função. Isso é muito eficiente porque você não precisa atribuir cada usuário a um canal. Basta conceder o acesso da função ao canal e atribuir os usuários à função.

Com isso em mente, substitua a função de sincronização em sync-gateway-config.json:

Veja o que está acontecendo:

  1. Usuários com o nível 1 tem acesso de gravação porque você chama a função canal função. Em seguida, conceda a esse usuário e à função nível 3 acesso a esse canal. É aqui que o poder das funções realmente se destaca. Ao conceder acesso a uma função, você está concedendo a todos os usuários com essa função acesso ao canal. A chamada para requireRole concederá a permissão de gravação.
  2. Documentos do tipo revisão criado por um nível 2 função: o documento deve ir para o mesmo canal que o restaurante ao qual pertence. A chamada para requireRole concederá a permissão de gravação.
  3. Documentos do tipo revisão criado por um nível 3 função: o documento deve ir para o canal desse restaurante. nível 3 os usuários também têm acesso de leitura a todos os {nome_do_usuário}-em-revisão canais. Eles podem aprovar/rejeitar as avaliações pendentes de outros usuários.

Inicie o Sync Gateway com o arquivo de configuração atualizado:

Neste exemplo, você está utilizando os três principais recursos das funções:

  • Conceder a uma função acesso a um canal e, indiretamente, a todos os usuários com essa função.
  • Conceder permissão de gravação usando um requireRole.
  • Atribuição de uma função a um usuário.

Agora você pode testar se a função Sync se comporta como esperado com as seguintes solicitações HTTP.

Execução de cenários diferentes

Cenário 1

Documentos do tipo revisão criado por um nível 1 usuário: o documento deve ir para a pasta {nome_do_usuário}-em-revisão e os usuários com o canal nível 3 A função também deve ter acesso a esse canal.

Faça login como usuário jens:

Salvar um novo documento do tipo revisão (substitua o token pelo que foi retornado no Set-Cookie cabeçalho acima):

  • Verifique se o usuário jens tem acesso ao canal jens-em-revisão e o documento de comentários está lá.
  • Verifique se o usuário traun tem acesso ao canal jens-em-revisão.

Você também pode visualizar os canais aos quais esse documento pertence e as funções/usuários que têm acesso a ele na seção Documentos guia:

Cenário 2

Conceder acesso de gravação usando uma função.

Fazer login como andy e substitua o token pelo que você recebeu de volta da solicitação de login.

  • Verifique se o comentário foi adicionado ao canal do restaurante (chamado 123 neste exemplo).

Cenário 3

Atribuição de uma função a um usuário.

Fazer login como traun e substitua o token pelo que você recebeu de volta da solicitação de login.

  • Verifique se William tem função nível 3.
  • Verifique se William tem acesso ao jens-em-revisão canal.

Conclusão

Neste tutorial, você aprendeu a usar canais e requireRole para validar e executar operações de gravação de forma dinâmica. Você também atribuiu vários canais de uma só vez a vários usuários usando a API de função.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por James Nocentini, redator técnico, celular, Couchbase

James Nocentini é o redator técnico responsável pela documentação do Couchbase Mobile. Anteriormente, ele trabalhou como Developer Advocate e, antes disso, como desenvolvedor front-end da HouseTrip. Ele também gosta de escrever tutoriais sobre Android para raywenderlich.com em seu tempo livre.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.