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.

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.

Deixar uma resposta