teqo-backup/docs/changelog/2026-08-19-c141.md

1.6 KiB
Raw Permalink Blame History

C141 — perfis de permissão por assessor: Visão × Edição configuráveis (2026-08-19): o coordenador/candidato define por assessor, em /campanha/assessores (coluna "Permissão" com badge + popover, seção no detalhe e no draft de novo assessor), o que ele vê (carteira|tudo) e o que ele edita (carteira|tudo|somente_leitura) — contas novas e existentes seguem no padrão Carteira·Edita carteira até configurarem. Enforcement fail-closed no servidor: a leitura alarga com Visão "Tudo" via prólogo novo resolveProfileScopedRead (municípios, lideranças, updates, pledges, atividades, contatos derivados), a escrita segue o eixo de Edição (advisorEditingAccess) nos canUpdate*/canCreate* de todos os domínios, no check do giro e no create individual de atividade (ambos contra getWritableMunicipalityIds), e a ficha de contatos passou a ser autorizada pelo escopo de escrita (assertPersonContactWritable — antes era "você edita o que vê", que a Visão "Tudo" alargaria em escrita de PII). Caps mantidos: demandas seguem a regra própria (C143), apoiadores (PII) e telefones de contas ficam na carteira mesmo com Tudo, e escritas de coordenação (contas, municipality.advisors, nível de envolvimento E14, allocationDecision) continuam restritas. Combinação incoerente (Edição "Tudo" sem Visão "Tudo") é rejeitada no zod, na action e no hook enforceCoherentAdvisorProfile (REST/admin incluídos). Migration 20260819_214755_add_campaign_user_advisor_permission_profile (duas colunas select com default 'carteira', sem backfill).