mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
As server actions do painel (marca, e-mail, Google, Meta, destinos internos,
módulos, comportamento, cadastro, pedidos de cadastro e configuração da
instalação) chamavam requirePlatformAdminEscrita sem try/catch: a recusa de
support_readonly ou de MFA pendente subia ao error boundary, e a pessoa não
lia "seu acesso é somente leitura" nem "confirme a verificação em duas
etapas". Nada era gravado — a perda era a explicação.
Agora todas passam por escritaDeAdminOuRecusa(), que devolve
{ok:false, error:'forbidden_scope'|'mfa_required'} e deixa o redirect de
quem não é platform admin subir como antes. As telas leem a frase da mesma
tabela que o servidor usa (lib/auth/recusa-de-escrita-de-admin.ts, sem
next/*), com espanhol. A cerca admin-escrita-exige-scope-full ganha a regra
D: arquivo "use server" não chama o helper que lança.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
components/
Componentes React compartilhados.
ui/— primitives do shadcn/ui (instalar vianpx shadcn@latest add <component>)<Feature>/— componentes específicos de domínio (ex:inbox/ConversationList.tsx)
Convenções
- Server Components por default;
"use client"apenas quando precisa estado/event handler/browser API - Props tipadas;
Readonly<{...}>em props de componentes puros - Sem fetching direto em Server Component sem cache configurado (
cache: "no-store"ourevalidate) - Estilo via Tailwind + tokens de
app/globals.css. Sem CSS-in-JS