https://github.com/renanjava/jwt
https://github.com/renanjava/jwt
Last synced: 10 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/renanjava/jwt
- Owner: renanjava
- Created: 2025-06-04T23:16:02.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-13T19:09:10.000Z (about 1 year ago)
- Last Synced: 2025-06-13T20:25:12.444Z (about 1 year ago)
- Language: TypeScript
- Size: 255 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Projeto NestJS JWT + RBAC
Este projeto é uma API RESTful desenvolvida com [NestJS](https://nestjs.com/) que implementa autenticação baseada em JWT (JSON Web Token) e controle de acesso baseado em papéis (RBAC - Role-Based Access Control). O objetivo é demonstrar como proteger rotas e recursos sensíveis utilizando autenticação e autorização robustas.
---
## Sumário
- [Descrição Geral](#descrição-geral)
- [Tecnologias Utilizadas](#tecnologias-utilizadas)
- [Como Rodar o Projeto](#como-rodar-o-projeto)
- [Principais Funcionalidades](#principais-funcionalidades)
- [Rotas da API](#rotas-da-api)
- [Destaques: JWT e RBAC](#destaques-jwt-e-rbac)
- [Testes](#testes)
- [Referências](#referências)
---
## Descrição Geral
A API permite o cadastro e autenticação de usuários, atribuindo papéis (roles) como `USER` ou `ADMIN`. Usuários autenticados recebem um token JWT, que deve ser enviado nas requisições subsequentes para acessar rotas protegidas. O RBAC garante que apenas usuários com o papel adequado possam acessar determinados endpoints.
---
## Tecnologias Utilizadas
- **NestJS**: Framework Node.js para aplicações escaláveis.
- **Prisma ORM**: Mapeamento objeto-relacional para banco SQLite.
- **JWT**: Autenticação stateless.
- **Passport**: Middleware de autenticação.
- **BcryptJS**: Hash de senhas.
- **Class-validator**: Validação de DTOs.
- **SQLite**: Banco de dados leve para desenvolvimento.
---
## Como Rodar o Projeto
```bash
# Instale as dependências
npm install
# Rode as migrações do Prisma
npx prisma migrate dev
# Inicie o servidor em modo desenvolvimento
npm run start:dev
```
A API estará disponível em `http://localhost:3000`.
---
## Principais Funcionalidades
- **Cadastro de Usuário** com papel (`role`) definido.
- **Login** com geração de token JWT.
- **Proteção de rotas** usando JWT.
- **Controle de acesso** por papel (RBAC) usando decorators e guards.
- **CRUD de usuários** (restrito a ADMIN).
---
## Rotas da API
### Autenticação
- **POST `/auth/register`**
Cadastra um novo usuário.
**Body:**
```json
{
"name": "Nome",
"email": "email@exemplo.com",
"password": "senha",
"role": "USER" // ou "ADMIN"
}
```
- **POST `/auth/login`**
Realiza login e retorna um token JWT.
**Body:**
```json
{
"email": "email@exemplo.com",
"password": "senha"
}
```
**Resposta:**
```json
{
"access_token": "JWT_TOKEN"
}
```
### Usuários (Acesso restrito a ADMIN)
> Todas as rotas abaixo exigem o envio do token JWT no header:
> `Authorization: Bearer JWT_TOKEN`
- **GET `/user`**
Lista todos os usuários.
- **GET `/user/:id`**
Busca usuário por ID.
- **PATCH `/user/:id`**
Atualiza dados do usuário.
- **DELETE `/user/:id`**
Remove usuário.
---
## Destaques: JWT e RBAC
### JWT (JSON Web Token)
- Após o login, o usuário recebe um token JWT assinado.
- O token deve ser enviado no header `Authorization` para acessar rotas protegidas.
- O payload do token inclui informações como `sub` (id do usuário), `username` e `role`.
### RBAC (Role-Based Access Control)
- O projeto utiliza decorators (`@Roles`) e guards (`RolesGuard`) para restringir o acesso a rotas com base no papel do usuário.
- Exemplo de uso:
```ts
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles(Role.ADMIN)
```
- Apenas usuários com o papel `ADMIN` podem acessar rotas de gerenciamento de usuários.
---
## Testes
- **Unitários:**
`npm run test`
- **E2E:**
`npm run test:e2e`
---
## Referências
- [Documentação NestJS](https://docs.nestjs.com/)
- [Documentação Prisma](https://www.prisma.io/docs/)
- [JWT.io](https://jwt.io/)
- [RBAC - Wikipedia](https://en.wikipedia.org/wiki/Role-based_access_control)
---
**Observação:**
Este projeto é um exemplo didático para demonstrar autenticação JWT e RBAC com NestJS. Para ambientes de produção, utilize variáveis de ambiente para segredos e siga as melhores práticas de segurança.