- apps/api/src/users/: invite (senha temporária, mesma entropia do legado), PATCH (role/isActive, com checagem de peso), reset de senha administrativo, troca de senha self-service, grant/revoke de acesso a aplicação — cada ação sensível auditada. - apps/api/src/roles/: CRUD de papéis e gestão de role_permissions, exclusivo super_admin (SuperAdminGuard), mirando o requireSuperAdmin do legado — deliberadamente não generalizado para o modelo de permissão resource+action+scope, por ser a raiz do próprio sistema de autorização (documentado em roles.service.ts). - apps/api/src/auth/role-weight.ts: assertCanAssignRole/assertCanActOnUser (eden.md §1.6) — um ator nunca atribui papel nem mexe em usuário com peso maior que o seu; super_admin sempre passa. - .gitignore: .claude/worktrees/ (worktrees temporários de subagentes paralelos nunca devem virar submódulo do repo principal). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
24 lines
1021 B
TypeScript
24 lines
1021 B
TypeScript
import { CanActivate, ExecutionContext, ForbiddenException, Injectable } from "@nestjs/common";
|
|
import type { Request } from "express";
|
|
import { SUPER_ADMIN_ROLE } from "./permissions.js";
|
|
|
|
/**
|
|
* Role definition and the permission matrix itself (role_permissions) are
|
|
* the root of the whole authorization system — deliberately kept
|
|
* super_admin-only and hardcoded, exactly like the legacy's
|
|
* `requireSuperAdmin` (eden.md §8), rather than generalized to the
|
|
* resource/action/scope model. Generalizing config-of-the-authorization-
|
|
* system-itself would let a misconfigured permission accidentally grant
|
|
* permission-configuration rights — not worth the flexibility.
|
|
*/
|
|
@Injectable()
|
|
export class SuperAdminGuard implements CanActivate {
|
|
canActivate(context: ExecutionContext): boolean {
|
|
const request = context.switchToHttp().getRequest<Request>();
|
|
if (request.edenUser?.roleKey !== SUPER_ADMIN_ROLE) {
|
|
throw new ForbiddenException("Exclusivo do super_admin");
|
|
}
|
|
return true;
|
|
}
|
|
}
|