Desafio Técnico: Desenvolvimento de uma API de Autenticação, Autorização e Gerenciamento de Permissões com Node.js
Recentemente, participei de um desafio técnico para desenvolvedor back-end, onde tive a oportunidade de criar uma API completa com foco em autenticação, autorização e gerenciamento de permissões de usuários. Utilizei tecnologias modernas como Node.js, Fastify, Prisma, JWT, e Zod para entregar uma solução robusta e segura.
Neste artigo, vou compartilhar um pouco da experiência, as tecnologias utilizadas e as principais funcionalidades que implementei.
🎯 Objetivo do Projeto
O desafio tinha como objetivo principal criar uma API RESTful capaz de:
- Autenticar usuários com CPF e senha, utilizando JWT para autenticação.
- Gerenciar permissões de acesso com base em roles (ex: Administrador, Vendedor).
- Implementar um sistema onde apenas administradores podem criar ou remover permissões de outros usuários.
- Documentar toda a API, facilitando o consumo e teste.
🛠️ Tecnologias Utilizadas
- Node.js: O motor por trás da API, utilizado para criar um servidor rápido e eficiente.
- Fastify: Framework escolhido por ser leve e otimizado para APIs de alta performance.
- Prisma: Um ORM (Object-Relational Mapping) poderoso que facilitou a interação com o banco de dados PostgreSQL.
- JWT (JSON Web Tokens): Utilizado para gerenciar autenticação e fornecer tokens de acesso para as rotas protegidas.
- Zod: Biblioteca para validação de dados que garantiu a segurança dos dados de entrada em todas as rotas.
🔑 Funcionalidades Implementadas
1. Autenticação de Usuários
A API permite que os usuários façam login com CPF e senha. Após a autenticação bem-sucedida, um token JWT é gerado e devolvido ao usuário. Esse token é utilizado para acessar rotas protegidas.
Exemplo de Requisição:
POST /api/login
{
"cpf": "793.431.150-83",
"password": "senhapadrao"
}
Se a autenticação for bem-sucedida, um token JWT será retornado para ser usado nas demais rotas.
2. Criação e Gerenciamento de Permissões
Somente administradores têm permissão para criar e gerenciar permissões de usuários. As rotas de criação, listagem e remoção de permissões garantem controle refinado sobre o que cada usuário pode acessar na aplicação.
Exemplo de Adição de Permissão:
POST /api/users/permissions
{
"userId": "cm159sosc0000ppqgr5t4gnlp",
"permissionId": "cm159sosc0000ppqgr5t4gnlp"
}
3. Controle de Acesso Baseado em Roles
O sistema foi projetado para permitir que apenas usuários com a role ADMIN possam acessar rotas específicas, como as que adicionam ou removem permissões. Usuários sem esse nível de acesso recebem um código 403 Forbidden.
4. Documentação da API
Para facilitar a integração e o uso da API, toda a documentação foi gerada utilizando OpenAPI. Isso permite que desenvolvedores utilizem a API facilmente, testando todas as funcionalidades diretamente via ferramentas como o Postman.
⚙️ Como Rodar o Projeto
Se você quiser testar a API localmente, basta seguir os passos abaixo:
-
Clone o repositório:
git clone https://github.com/DevSolto/Desafio-Node.js.git cd seu-repositorio
-
Instale as dependências:
pnpm install
-
Configure o banco de dados no arquivo
.env
:DATABASE_URL=postgresql://<usuario>:<senha>@<host>:<porta>/<database>
-
Rode as migrações para criar as tabelas no banco de dados:
pnpm run migrate
-
Inicie o servidor:
pnpm run dev
Agora você pode testar todas as rotas utilizando o Postman ou outra ferramenta de sua escolha.
🧠 Lições Aprendidas
Este desafio foi uma ótima oportunidade para aprofundar meus conhecimentos em:
- Autenticação e autorização: Trabalhei diretamente com o gerenciamento de tokens JWT e controle de acesso baseado em roles.
- Boas práticas de desenvolvimento: Refatorei o código diversas vezes para garantir uma arquitetura limpa e escalável.
- Documentação de API: A documentação com OpenAPI facilitou muito o processo de consumo da API, garantindo que ela seja de fácil integração para outros desenvolvedores.
📜 Conclusão
Criar uma API que lida com autenticação e autorização é uma das tarefas mais críticas no desenvolvimento de back-end, pois a segurança é essencial para garantir que os dados dos usuários sejam protegidos. Este projeto foi um excelente exercício para fortalecer minhas habilidades nessa área.
Se você quiser ver o código completo, ele está disponível no meu GitHub.
Feedbacks e sugestões são sempre bem-vindos!
🔗 Conecte-se Comigo
Se você também trabalha com Node.js ou tem interesse em desenvolvimento de APIs, vamos conectar! Estou sempre em busca de novas oportunidades e desafios.