{"id":30253966,"url":"https://github.com/renanjava/jwt","last_synced_at":"2025-08-15T13:37:51.357Z","repository":{"id":297330942,"uuid":"996412805","full_name":"renanjava/jwt","owner":"renanjava","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-13T19:09:10.000Z","size":261,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-13T20:25:12.444Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/renanjava.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-04T23:16:02.000Z","updated_at":"2025-06-13T19:09:13.000Z","dependencies_parsed_at":"2025-06-05T04:53:27.783Z","dependency_job_id":"cb6aea4f-de82-4a60-8bbc-ad22b65ec7db","html_url":"https://github.com/renanjava/jwt","commit_stats":null,"previous_names":["renanjava/jwt"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/renanjava/jwt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renanjava%2Fjwt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renanjava%2Fjwt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renanjava%2Fjwt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renanjava%2Fjwt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/renanjava","download_url":"https://codeload.github.com/renanjava/jwt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renanjava%2Fjwt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270579101,"owners_count":24610037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-15T02:00:12.559Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-15T13:37:44.354Z","updated_at":"2025-08-15T13:37:51.296Z","avatar_url":"https://github.com/renanjava.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projeto NestJS JWT + RBAC\r\n\r\nEste 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.\r\n\r\n---\r\n\r\n## Sumário\r\n\r\n- [Descrição Geral](#descrição-geral)\r\n- [Tecnologias Utilizadas](#tecnologias-utilizadas)\r\n- [Como Rodar o Projeto](#como-rodar-o-projeto)\r\n- [Principais Funcionalidades](#principais-funcionalidades)\r\n- [Rotas da API](#rotas-da-api)\r\n- [Destaques: JWT e RBAC](#destaques-jwt-e-rbac)\r\n- [Testes](#testes)\r\n- [Referências](#referências)\r\n\r\n---\r\n\r\n## Descrição Geral\r\n\r\nA 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.\r\n\r\n---\r\n\r\n## Tecnologias Utilizadas\r\n\r\n- **NestJS**: Framework Node.js para aplicações escaláveis.\r\n- **Prisma ORM**: Mapeamento objeto-relacional para banco SQLite.\r\n- **JWT**: Autenticação stateless.\r\n- **Passport**: Middleware de autenticação.\r\n- **BcryptJS**: Hash de senhas.\r\n- **Class-validator**: Validação de DTOs.\r\n- **SQLite**: Banco de dados leve para desenvolvimento.\r\n\r\n---\r\n\r\n## Como Rodar o Projeto\r\n\r\n```bash\r\n# Instale as dependências\r\nnpm install\r\n\r\n# Rode as migrações do Prisma\r\nnpx prisma migrate dev\r\n\r\n# Inicie o servidor em modo desenvolvimento\r\nnpm run start:dev\r\n```\r\n\r\nA API estará disponível em `http://localhost:3000`.\r\n\r\n---\r\n\r\n## Principais Funcionalidades\r\n\r\n- **Cadastro de Usuário** com papel (`role`) definido.\r\n- **Login** com geração de token JWT.\r\n- **Proteção de rotas** usando JWT.\r\n- **Controle de acesso** por papel (RBAC) usando decorators e guards.\r\n- **CRUD de usuários** (restrito a ADMIN).\r\n\r\n---\r\n\r\n## Rotas da API\r\n\r\n### Autenticação\r\n\r\n- **POST `/auth/register`**  \r\n  Cadastra um novo usuário.  \r\n  **Body:**\r\n\r\n  ```json\r\n  {\r\n    \"name\": \"Nome\",\r\n    \"email\": \"email@exemplo.com\",\r\n    \"password\": \"senha\",\r\n    \"role\": \"USER\" // ou \"ADMIN\"\r\n  }\r\n  ```\r\n\r\n- **POST `/auth/login`**  \r\n  Realiza login e retorna um token JWT.  \r\n  **Body:**\r\n  ```json\r\n  {\r\n    \"email\": \"email@exemplo.com\",\r\n    \"password\": \"senha\"\r\n  }\r\n  ```\r\n  **Resposta:**\r\n  ```json\r\n  {\r\n    \"access_token\": \"JWT_TOKEN\"\r\n  }\r\n  ```\r\n\r\n### Usuários (Acesso restrito a ADMIN)\r\n\r\n\u003e Todas as rotas abaixo exigem o envio do token JWT no header:  \r\n\u003e `Authorization: Bearer JWT_TOKEN`\r\n\r\n- **GET `/user`**  \r\n  Lista todos os usuários.\r\n\r\n- **GET `/user/:id`**  \r\n  Busca usuário por ID.\r\n\r\n- **PATCH `/user/:id`**  \r\n  Atualiza dados do usuário.\r\n\r\n- **DELETE `/user/:id`**  \r\n  Remove usuário.\r\n\r\n---\r\n\r\n## Destaques: JWT e RBAC\r\n\r\n### JWT (JSON Web Token)\r\n\r\n- Após o login, o usuário recebe um token JWT assinado.\r\n- O token deve ser enviado no header `Authorization` para acessar rotas protegidas.\r\n- O payload do token inclui informações como `sub` (id do usuário), `username` e `role`.\r\n\r\n### RBAC (Role-Based Access Control)\r\n\r\n- O projeto utiliza decorators (`@Roles`) e guards (`RolesGuard`) para restringir o acesso a rotas com base no papel do usuário.\r\n- Exemplo de uso:\r\n  ```ts\r\n  @UseGuards(JwtAuthGuard, RolesGuard)\r\n  @Roles(Role.ADMIN)\r\n  ```\r\n- Apenas usuários com o papel `ADMIN` podem acessar rotas de gerenciamento de usuários.\r\n\r\n---\r\n\r\n## Testes\r\n\r\n- **Unitários:**  \r\n  `npm run test`\r\n- **E2E:**  \r\n  `npm run test:e2e`\r\n\r\n---\r\n\r\n## Referências\r\n\r\n- [Documentação NestJS](https://docs.nestjs.com/)\r\n- [Documentação Prisma](https://www.prisma.io/docs/)\r\n- [JWT.io](https://jwt.io/)\r\n- [RBAC - Wikipedia](https://en.wikipedia.org/wiki/Role-based_access_control)\r\n\r\n---\r\n\r\n**Observação:**  \r\nEste 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.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenanjava%2Fjwt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frenanjava%2Fjwt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenanjava%2Fjwt/lists"}