No blog anterior da série Sync Gateway, exploramos Como autenticar e autorizar usuários em um aplicativo por meio de alguns dos recursos do Sync Gateway. Com base nessa série, exploraremos agora como validar tipos de documentos em Gateway de sincronização para determinar sua acessibilidade do lado do cliente móvel com um usuário específico. Isso levará à discussão do canal sobre como o Couchbase Mobile faz a segurança do lado da leitura no próximo blog da nossa série. Para a segurança do lado da gravação, exploraremos os principais métodos na função Sync que permitiriam que determinados documentos provenientes de usuários conhecidos fossem gravados no banco de dados backend.
Função de sincronização
Imagine que temos um documento ou muitos documentos em nosso banco de dados, por exemplo, em que temos uma chave de tipo que referenciaremos em nosso código de validação. O coração do Sync Gateway é a lógica de implementação da função de sincronização e, abaixo, vemos como um tipo de documento pode ser verificado para os controles de acessibilidade dos usuários em um aplicativo.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
“sync” : ‘ function(doc, oldDoc) { if (doc.type == “friends”) { //Process new friends document requireUser(doc.owner); //The owner of the friends access(doc.friends, “items-”+doc.owner); channel(“private-”+doc.owner); access(doc.owner, “private-”+doc.owner) } else if (doc.type == “vehicles”){ requireUser(doc.owner); //The owner of the vehicles document access(doc.vehicles, “items-”+doc.owner); channel(“private-”+doc.owner); access(doc.owner, “private-”+doc.owner) } else{ requireUser(doc.owner) channel(“items-”+doc.owner); } }‘ |
Com o campo "type" nos documentos, podemos diferenciar por valores específicos o que o documento representa. Se um tipo de documento representar "escolas", "veículos" ou "amigos", então, na função de sincronização, podemos adicionar uma instrução de alternância para capturar como permitiremos o processamento de diferentes tipos de documentos de maneiras diferentes na função de sincronização. Primeiro, verificamos o tipo de documento para ver se é do tipo "amigos" e, em seguida, verificamos se a propriedade do proprietário do documento corresponde ao ID do usuário autenticado atual por meio da instrução 'requireUser()'. Se a propriedade owner corresponder ao usuário autenticado atual, daremos acesso a um documento a todos os amigos por meio do canal 'items-doc.owner'. Isso significa basicamente que ninguém mais verá a lista de amigos que foi convidada pelo usuário, pois ela é privada apenas para o próprio usuário.
A cláusula "else" é onde, se este não for um documento de um amigo ou de veículos, então esse será um documento de item da escola e, novamente, validamos que a propriedade do proprietário corresponde ao ID do usuário autenticado atual. Como antes, adicionamos os itens ao canal 'items-' para a propriedade do proprietário do item e damos a esse usuário acesso a esse canal.
|
1 2 3 |
else{ throw({forbidden: “Invalid document type”}); } |
Em vez do método 'requireUser()', vamos substituí-lo pelo método O método 'requireAccess("items-"+doc.owner)' agora, basicamente, se você quiser gravar um novo item em uma lista, precisará ter acesso ao canal de itens do usuário específico para o qual deseja adicionar o item.
|
1 |