aceleradora-TW / aceleradora-TW/e-acelera-back

feat: RBAC: Autorização por role nas rotas administrativas de CMS

オープン
#94 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
TypeScript
スター
2
フォーク
4
PR マージ指標
30日以内にマージされた PR はありません

説明

# Contexto
Mesmo com autenticação implementada, não existe validação de role/permissão para acesso ao CMS. Qualquer usuário autenticado teria acesso à interface administrativa, sem diferenciação por nível de permissão.

### O que foi encontrado
O NextAuth não inclui role no payload de sessão/JWT. O callback de JWT em [src/app/api/auth/[...nextauth]/route.ts](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html) grava apenas [id](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html), [provider](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html) e [accessToken](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html). A tipagem de sessão em [next-auth.d.ts:8](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html) não expõe campo de role. Não há checagem de role em páginas ou middleware de CMS.

### Onde foi encontrado

[src/app/api/auth/[...nextauth]/route.ts](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html) — callbacks JWT sem role
- [next-auth.d.ts:8](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html) — interface Session sem role
- [middleware.ts:47](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html) — matcher só em /login, sem validação de role
- [page.tsx:5](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html) — página CMS sem guard de role

### Impacto no front
Sem validação de role no front, a autorização fica delegada apenas ao backend. Se houver falha na API ou race condition, usuário sem permissão pode renderizar UI administrativa. Além disso, falta feedback acesso negado no cliente.

Critérios de aceite

1- Apenas usuários com role permitida conseguem acessar /cms/*.
2 - Usuário autenticado mas sem role permitida é redirecionado para página de acesso negado.
3 - Role é incluída no payload de sessão (JWT + Session interface) via NextAuth.
4 - A validação de role é aplicada antes da renderização de páginas CMS.
5 - A lista de roles permitidas é configurável e centralizada.
6 - Refresh em /cms/* mantém a mesma regra de autorização.
7 - O comportamento é consistente em cenários onde role está ausente, nula ou inválida.

# Notas técnicas

1 - A role deve entrar no NextAuth callback em [src/app/api/auth/[...nextauth]/route.ts](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html), vinda do backend ou normalizada do provider social.
2 - A tipagem em [next-auth.d.ts](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html) precisa ser atualizada para refletir [user.role](vscode-file://vscode-app/c:/Users/geova/AppData/Local/Programs/Microsoft%20VS%20Code/41dd792b5e/resources/app/out/vs/code/electron-browser/workbench/workbench.html).
3 - A validação no middleware ou layout de CMS deve verificar se role está na lista de permitidas.
4 - Roles permitidas devem estar em um único lugar (constante, env var ou configuração).
5 - A página de acesso negado será criada em card separado.

# Dependências:
Status de dependência: bloqueado por
Só após: Incluir role no payload de sessão NextAuth https://github.com/orgs/aceleradora-TW/projects/10/views/1?pane=issue&itemId=176791052
Recomendado também após: Guard de autenticação para rotas administrativas CMS https://github.com/orgs/aceleradora-TW/projects/10/views/1?pane=issue&itemId=176754233

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。