Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sistema de Autorização #28

Open
AlAnNuB opened this issue Nov 8, 2024 · 0 comments
Open

Sistema de Autorização #28

AlAnNuB opened this issue Nov 8, 2024 · 0 comments

Comments

@AlAnNuB
Copy link
Owner

AlAnNuB commented Nov 8, 2024

Contexto

Uma plataforma como o TabNews pode se beneficiar de ter um Sistema de Autorização granular e isso significa que, ao invés de usuários terem credenciais como Administrador ou Editor que agrupam várias sub-credenciais, seria interessante o sistema ter a possibilidade de atribuir permissões específicas e fragmentadas, diretamente associadas a cada usuário.

Com isto, um usuário novo no site pode ter a permissão e credencial para criar respostas na plataforma, porém não ter a permissão para criar publicações principais (as que aparecem na Home) e só irá ganhar esta permissão após alcançar um determinado nível de engajamento. Ou no caso de um moderador ganhar o poder de editar a publicação de outros usuários, mas não ganhar a permissão de ver o email dos usuários e nem conseguir rodar as migrations do sistema.

Seja qual for o caso, um sistema mais granular se torna mais flexível e capaz de se adaptar a diferentes cenários e necessidades de segurança, permitindo uma administração mais precisa dos direitos de cada usuário.

Execução

Como descrito na seção Contexto, o sistema não deveria ser "Role-based Access Control" e deveria ser mais algo como "Resource-based Access Control".

Tudo isto deveria ser controlado pelas features que um usuário possui e para na prática ter esse controle nós devemos:

  1. Usar middlewares do next-connect para sempre injetar um usuário na requisição, seja este um usuário autenticado e com um conjunto de permissões, seja um usuário anônimo em com outro conjunto de permissões.
  2. Após isso, verificar se o usuário tem permissão para fazer tal ação contra tal recurso.
  3. Antes de responder a requisição, fazer um filtro de saída simples baseado na permissão do usuário sobre quais dados podem ser retornados.
  4. Travar rotas que fazem sentido, como a /api/v1/migrations utilizando este novo sistema.

E implementar este Sistema de Autorização terá impacto no Fluxo de Cadastro, Ativação e Autenticação de um usuário, onde para criar uma conta, ele deverá passar por estes passos:

  1. Criar uma conta.
  2. Receber um email para ativar esta conta (confirmar o email).
  3. Clicar no link dentro deste email, ativar a conta e receber as credenciais base.
  4. Conseguir criar uma nova sessão no sistema.
  5. E apenas com ela conseguir executar ações contra a API (nos endpoints que precisam de credencial).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant