Skip to content

O estudo visa esclarecer a viabilidade, características e custos de ferramentas para a biblioteca comunitária e individual do Planfy.

Foram analisadas duas ferramentas, Dropbox e Nextcloud.

Nextcloud

Visão Geral

O Nextcloud é um projeto open-source de servidor de arquivos, sendo possível ter uma nuvem privada para armazenamento de arquivo, que pode ser acessado de qualquer dispositivo por meio dos aplicativos cliente ou no browser.

Interface

O software já possui uma interface padrão, que pode ser adaptada. Isso possibilita que nosso aplicativo incorpore o conteúdo completo do software, entregando uma experiencia de integração mais completa, visto que o usuário faria login e todas as operações sem ter de abrir abas externas. (A ser confirmado pelo Front-end)

Usuários e permissões

O Nextcloud possui sistema de login e criação de usuários. O que permite criar usuários de acordo com as necessidades, inclusive com limite de armazenamento para cada usuário. É possível fazer as configurações de aplicações

Custos

Os custos estariam relacionados ao serviço de nuvem ou servidor local em que for instalado. O software consome poucos recursos, sendo recomendado 512mb de memória pelo site oficial. E o custo de armazenamento também se restringe aos de infraestrutura do servidor apenas.

Auditoria

No caso do Nextcloud, a auditoria está restrita aos logs de movimentação dos arquivos, como quem acessou qual arquivo e quem alterou a senha de um item ou o tornou público. Também é possível criar grupos de usuários e configurar a pasta inicial dos usuários para ser compartilhada com os administradores.

Implementação

Por ser um projeto open source as configurações padrões do software já são definidas a nível de código e mais configurações adicionais podem ser feitas pela interface como administrador ou alterando o código. O código está em PHP e a maioria dos endpoint retornam por padrão uma resposta XML e seguem um padrão chamado OCS, que é um protocolo baseado em API REST e WEBDav, que demandaria mais estudos para descrever uma implementação viável.

Dropbox

Visão Geral

O serviço do Dropbox é um repositório em nuvem que permite os usuários enviar e baixar arquivos, além de organizar e visualizar seu conteúdo. Também é possível compartilhar links de acesso dos arquivos para outros usuários. Também é possível fazer requisições às APIs do Dropbox em nome dos usuários, isso é possível graças ao suporte OAuth 2.0 que suas APIs também oferecem. Sendo assim, vamos analisar cada um dos aspectos da ferramenta. Fonte https://www.dropbox.com/developers/support

Custos

Por padrão, é gratuito fazer requisições as API a partir de qualquer conta. No entanto os custos são atribuídos aos planos da conta do usuário, os que melhor atendem as nossas necessidades são, o plano Standard que conta com 5.000 GB e ao menos 3 usuários com acesso administrativo, custando U$ 15 por usuário no faturamento mensal e 16% no faturamento anual e o plano Professional que dispõe de 3.000 GB de armazenamento e permite apenas 1 usuário administrativo, com o custo de U$ 16,58 ao mês no faturamento mensal e 17% de desconto no faturamento anual.

Também e oferecido um plano individual com 2.000 GB por U$ 9,99 ao mês. Falaremos disso logo em breve. Fonte: https://www.dropbox.com/plans?billing=monthly

Usuários

A forma de lidar com os usuários pode variar de acordo com as regras de negócio a serem aplicadas na implementação das bibliotecas, basicamente podemos utilizar o armazenamento contratado e criar pastas compartilhadas com os colaboradores.

Por exemplo, uma pasta compartilhada com todos os colaboradores representando a biblioteca comunitária que seria incorporada em uma sessão específica do nosso APP e criar pastas para cada colaborador, com as permissões necessárias e disponibilizá-las dinamicamente em uma outra sessão específica do APP representando a biblioteca individual do colaborador.

Aqui, vale ressaltar que estamos considerando que nossos usuários terão contas básicas que possuem apenas 2GB.

Outra opção é utilizar o próprio espaço do usuário que vai estar acessando a biblioteca, sendo possível criar uma pasta ‘root’ para o colaborador dentro de sua própria conta do Dropbox e disponibilizá-la dentro do nosso aplicativo. Essa abordagem implica em mais complexidade.

Além disso, caso seja necessário utilizar o espaço do próprio usuário e os 2 GB não serem suficientes, a opção do plano individual mencionado na sessão de custos pode ser uma alternativa ao oferecer a possibilidade de cada usuário ter uma conta com 2.000 GB de armazenamento.

Permissões e autenticação

Temos algumas formas de lidar com permissões, de acordo com a documentação temos as seguintes opções:

Acesso com escopo

A plataforma DBX usa escopos para que os desenvolvedores possam especificar o nível de acesso que seu aplicativo tem aos dados do Dropbox do usuário e da equipe. Os escopos são selecionados na guia Permissões da página de configurações de um aplicativo. Durante o fluxo OAuth, um usuário autoriza o aplicativo a ter esse nível de acesso específico.

Ao criar um aplicativo com escopo, os desenvolvedores precisam selecionar o nível de acesso ao conteúdo. Os escopos selecionados controlam os comportamentos e ações de um aplicativo, enquanto o nível de acesso controla o conteúdo e os recursos nos quais o aplicativo pode atuar. Selecionar Pasta do aplicativo concederá a você acesso com escopo apenas à pasta dedicada do seu aplicativo, enquanto selecionar Dropbox completo concederá acesso com escopo a todo o Dropbox do usuário.

Pasta de aplicativos

Uma pasta dedicada com o nome do seu aplicativo é criada dentro da pasta Aplicativos do Dropbox de um usuário. Seu aplicativo obtém acesso de leitura e gravação apenas a esta pasta e os usuários podem fornecer conteúdo ao seu aplicativo movendo arquivos para esta pasta.

Caixa de depósito completa

Você obtém acesso total a todos os arquivos e pastas no Dropbox de um usuário.

Sendo assim, podemos concluir que é viável a atualização do espaço de armazenamento do usuário, e também a auditoria dos arquivos.

Para a autenticação dos usuários, a plataforma de desenvolvimento do Dropbox disponibiliza um mecanismo pronto para que os usuários concedam acesso ao aplicativo por meio de um fluxo OAuth, sendo feita no lado servidor ou do cliente.

Implementação

A implementação deve ser feita com um mix de recursos disponibilizados pelo Dropbox, sendo eles requisições a API do Drop no nosso servidor para criar os endpoints necessários. Eles serão responsáveis por autenticar o usuário, conceder permissão ao nosso app, criar links compartilhados e buscá-los, criar pastas e arquivos, fazer upload e conceder novos acessos. E no front podemos usar os componentes pré-construídos que permitem a visualização das pastas e seus conteúdos dentro do nosso App, além de baixá-los.

Vale destacar que ao selecionar um arquivo para visualização, o usuário é redirecionado para uma nova aba personalizada do Dropbox. Já para fazer o upload de arquivos e criação de pasta na biblioteca individual precisamos criar componentes personalizados no front e consumir um endpoint construído no nosso backend.

Biblioteca Individual
Back-end
  • Criar collection que representando a pasta raiz do usuario e seus devidas operações, o relacionamento deve ser de um pra um.
  • Adicionar ao fluxo de criação de colaboradores a criação de pasta compartilhada com nome padronizado, gerar link compartilhado da pasta. Aqui o colaborador é adicionado como membro da pasta usando o e-mail institucional. Restringindo o acesso apenas para o mesmo.
  • Criar endpoint para criação de pasta de forma organizada. (Uma solução para a organização das pastas precisa ser desenvolvida)
  • Criar endpoint para upload de arquivos
  • Criar endpoint para deleção de pastas e arquivos
  • *Criar endpoint para retornar o link OAuth para autenticar e autorizar a visualização do conteúdo incorporado no nosso aplicativo.
  • Criar endpoint para verificar se o colaborador já criou a conta dropbox com o email institucional.
Front-end
  • Disponibilizar tela com embedder do dropbox apontando para pasta raiz do colaborador logado.
  • Incluir na tela componentes para fazer a as requisições para os endpoints de criação e deleção de pastas e arquivos.
  • Tratar de alguma forma caso o usuário não esteja logado, disponibilizando o link OAuth gerado no back-end
Biblioteca Comunitária
Back-end
  • Criar endpoint para pegar o link da pasta compartilhada, que estarão os arquivos a ser compartilhados com todos os colaboradores.
  • Adicionar todos os colaboradores como membros da pasta compartilhada
Front-end
  • Disponibilizar tela com embedder do dropbox apontando para a pasta da biblioteca comunitária
  • *Criar endpoint para retornar o link OAuth para autenticar e autorizar a visualização do conteúdo incorporado no nosso aplicativo.