116200ccc6b54d4c396d9df379d22bda3dcba0d2
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>
Description
No description provided
Languages
TypeScript
76.5%
JavaScript
23.1%
Shell
0.2%