CRUD de Usuários e Papéis (role weight, permissões, gitignore de worktrees)
- 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>
This commit is contained in:
19
apps/api/src/roles/dto/create-role.dto.ts
Normal file
19
apps/api/src/roles/dto/create-role.dto.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { IsInt, IsString, Matches, Max, Min } from "class-validator";
|
||||
|
||||
/** Same key format as the legacy: lowercase, starts with a letter, 2-30 chars (eden.md §1.2). */
|
||||
export class CreateRoleDto {
|
||||
@IsString()
|
||||
@Matches(/^[a-z][a-z0-9_]{1,29}$/, {
|
||||
message: "key deve começar com letra minúscula e conter apenas a-z, 0-9, _ (2-30 caracteres)",
|
||||
})
|
||||
key!: string;
|
||||
|
||||
@IsString()
|
||||
label!: string;
|
||||
|
||||
/** 100 (super_admin) is a fixed ceiling, never assignable here — eden.md §1.6. */
|
||||
@IsInt()
|
||||
@Min(0)
|
||||
@Max(99)
|
||||
weight!: number;
|
||||
}
|
||||
Reference in New Issue
Block a user