Etapa 6 — Vendas, parcelas e dashboards
Adiciona o módulo sales: vendas com itens/parcelas em transação, transições de status controladas (orçamento→confirmada→concluída, cancelamento em cascata pras parcelas), edição só em orçamento, recebimentos (marcar-pago, atualizar-atrasadas) e dashboards semanal/mensal/financeiro do tenant. Corrige uma falha de isolamento entre tenants nas views de dashboard (rodavam com privilégio do dono, ignorando RLS) via security_invoker = true nas views, coberta por teste e2e dedicado. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
-- Correção de segurança: as views de dashboard criadas na migration
|
||||
-- `20260812161100_rls_views_constraints` (dono = role bootstrap
|
||||
-- `seconectai`, superuser) rodam, por padrão, com os privilégios do
|
||||
-- *dono da view* — não de quem consulta. Como o dono é superuser, ele
|
||||
-- ignora Row Level Security, então qualquer role com apenas `SELECT` na
|
||||
-- view (ex: `app_tenant`) conseguiria ler dados de *todos* os tenants
|
||||
-- através dela, mesmo com as policies de RLS corretas nas tabelas por
|
||||
-- trás (`sales`, `sale_payments`). `security_invoker = true` (Postgres
|
||||
-- 15+, disponível na imagem `postgres:16-alpine` do docker-compose) faz a
|
||||
-- view rodar com os privilégios de quem a consultou, restaurando o
|
||||
-- isolamento por tenant também através das views.
|
||||
|
||||
ALTER VIEW "vw_resumo_vendas_semanal" SET (security_invoker = true);
|
||||
ALTER VIEW "vw_resumo_vendas_mensal" SET (security_invoker = true);
|
||||
ALTER VIEW "vw_recebimentos" SET (security_invoker = true);
|
||||
Reference in New Issue
Block a user