VPS 4 Builder 116200ccc6 security(rbac): autorização por cargo nos cadastros administrativos
Refatora a autorização: extrai capabilityCore; requireCapability passa a derivar o
clinicaId da requisição (param/body/query) quando não há tenantGuard; adiciona
requireCapabilityRow(cap, tabela) p/ rotas /:id cujo clinicaId vem da LINHA.

Gateia 12 rotas (cap por cargo, espelhando o frontend):
- especialidades/procedimentos: POST + PUT/:id + DELETE  (dono OU biomédico)
- planos: POST + PUT/:id + DELETE                          (dono)
- dentistas: POST + PUT/:id + DELETE/:id                   (dono)
GETs de catálogo seguem abertos (dados de referência usados em toda a app).

Corrige também risco pré-existente: POST/PUT de catálogo usavam authGuard SEM validar
vínculo (escrita cross-tenant) — agora validam vínculo + cargo.

Deferido: rotas /reorder (sem clinicaId/:id; baixo impacto) e horários de dentista (grupo agenda).
Validado em DEV: dono 404(fake)/dentista 403; GETs 200; negação por linha sem apagar dados.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 17:52:32 +02:00
S
Description
No description provided
36 MiB
Languages
TypeScript 76.5%
JavaScript 23.1%
Shell 0.2%