KasyKasy

Console Admin

Métricas, ferramentas de dev e demo de paywalls. Como abrir, o que cada aba mostra e como dar acesso.

Console em tela cheia na rota /admin. Serve dois públicos: administradores (dados reais de produção) e desenvolvedores (ferramentas de debug).

Implementação

  1. Para abrir, toque duas vezes no número de versão no rodapé de Configurações. Em debug, o console também aparece como link direto em Configurações.

  2. Para dar acesso admin a alguém, defina o campo role = "admin" no banco, nunca pelo app:

    • Firebase: Firestore → coleção users → documento do usuário → adicione role = admin
    • Supabase: Table editor → tabela users → coluna role = admin
    • API: seu servidor devolve e protege o campo role

    Para encontrar o ID do usuário: abra o console Admin → Ferramentas → Copiar UID, ou veja a Visão geral da sessão atual.

    Campo role definido como admin no documento do usuário no Firestore
    Firestore: documento do usuário com o campo role: 'admin' adicionado

    O role só pode ser gravado pelo servidor, nunca pelo app. Qualquer tentativa do cliente de alterar role é bloqueada nos três backends (Firestore rules / trigger Supabase / validação no seu servidor). Isso é intencional: senão qualquer usuário viraria admin.

Informações

Quem vê o quê

O acesso usa duas chaves independentes:

Debug (kasy run)Produção (build de release)
Abrir o consoleQualquer devSó admin
Ferramentas de dev (abas Kit e Ferramentas)SimNão aparecem
Dados reais de usuáriosSó adminSó admin
Demo de paywalls/adsAdmin (sempre teste)Admin

Resumo: debug abre as ferramentas de dev; o campo role abre os dados de produção.

Abas disponíveis

AbaConteúdoRequer role admin?Some em release?
Visão geralBackend ativo, sessão atual, contagem de solicitaçõesParcialNão
UsuáriosTabela com busca, filtro de assinantes, paginaçãoSimNão
SolicitaçõesFeature requests dos usuários (moderar, editar texto)SimNão
KanbanBoard de tarefas do projeto (ver Kanban), só aparece se o módulo estiver ligadoSimNão
Enviar pushFormulário de push em massaSimNão
KitDemos de features e galeria de componentesNão (dev)Sim
FerramentasDev Inspector, paywalls, anúncios, copiar UID/FCM, testar onboardingNão (dev)Sim

Lembra última seção (só em debug)

Em debug, o console reabre na última aba que você acessou, assim você não precisa navegar toda vez para onde estava trabalhando. Em release, sempre cai na Visão geral.

Ainda em debug, o atalho "Admin" de Configurações abre direto no Kanban em vez da Visão geral, para não disparar as consultas do dashboard quando você só quer mexer nas tarefas. Para que o debug se comporte como produção nesse ponto, mude kDebugAdminOpensKanban para false em lib/core/navigation/admin_routes.dart.

Como o role é protegido em cada backend

O user.isAdmin do app (que compara role == "admin") serve só para mostrar ou esconder interface. Toda leitura de dado real é validada de novo no servidor:

BackendBloqueio de escrita do roleLeitura dos usuários pelo admin
FirebaseAs regras do Firestore bloqueiam qualquer escrita do cliente no campo roleCloud Function listUsers confere role == "admin" pelo Admin SDK antes de devolver dados
SupabaseTrigger enforce_role_immutable impede anon e authenticated de gravar role; só service_role e o painel passamEdge Function admin-list-users valida o role pelo JWT de quem chamou e só então usa o service_role
API RESTSeu servidor devolve o role e precisa rejeitar qualquer tentativa do cliente de gravá-loEndpoint GET /admin/users que valida role == "admin" e responde 403 caso contrário

Atualizado em 03/11/2026