aceleradora-TW / aceleradora-TW/e-acelera-back
feat: RBAC: Autorização por role nas rotas administrativas de CMS
- 主要语言
- 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 还没有评估数据。