Como construir um portal do cliente que não vaze dados

Como construir um portal do cliente que não vaze dados

4 de junho de 2026

Você descreveu seu aplicativo para um agente de IA, viu a interface renderizar em segundos e fez login com sucesso no seu novo dashboard. Parece uma vitória enorme. Você convida seus primeiros dez clientes e tudo parece impecável. Mas, por trás dos belos componentes React e das animações suaves do Tailwind, um desastre silencioso pode estar esperando para acontecer.

Construir um portal do cliente é fundamentalmente diferente de construir um diretório público ou um app web simples. Em um portal do cliente, o isolamento de dados é a única funcionalidade que realmente importa. Se um cliente consegue acessar as faturas dele, ele jamais deve conseguir ver as faturas de outro cliente.

Muitos builders usam geradores de código por IA para criar a estrutura desses portais, confiando na IA para configurar backends como o Supabase. Mas confiar na IA para escrever políticas de Row-Level Security (RLS) é um atalho que frequentemente leva ao vazamento de dados.

Veja por que a segurança de banco de dados gerada por IA é frágil e como esquemas de permissão visuais oferecem um caminho mais confiável para portais do cliente.

A ilusão da segurança de frontend

Quando você constrói com assistentes de IA, eles tendem a escrever códigos que priorizam o feedback visual. A IA esconde um botão se o usuário não for administrador, ou esconde uma lista de registros se o e-mail do usuário não coincidir com o registro.

Isso é segurança de frontend, e é totalmente inútil por si só.

Qualquer pessoa com um navegador pode abrir as ferramentas de desenvolvedor, clicar na aba de rede e inspecionar os payloads JSON recebidos. Se a sua aplicação busca todos os registros de clientes no banco de dados e os filtra no frontend usando React ou Vue, seus dados já foram expostos. Um invasor não precisa hackear seu servidor - basta apertar F12 para ver os dados brutos que o seu código frontend tentou esconder.

Para criar um portal seguro, você deve filtrar os dados no nível do banco de dados antes mesmo que eles trafeguem pela rede. Se um cliente solicita uma lista de projetos, o mecanismo do banco de dados deve inspecionar a sessão, verificar a identidade e retornar apenas as linhas correspondentes.

Para projetos criados no Supabase, essa segurança do banco de dados depende inteiramente do Row-Level Security (RLS) do PostgreSQL.

As vulnerabilidades do Supabase RLS gerado por IA

O Supabase é uma excelente escolha de backend para apps personalizados, mas ele transfere a responsabilidade da segurança para a configuração do banco de dados. Configurar o RLS exige a escrita de políticas precisas de PostgreSQL usando SQL.

Quando você pede para um construtor de IA cuidar disso, você introduz vários pontos de falha.

1. Deriva da janela de contexto e complexidade de relacionamentos

Uma política de RLS simples é fácil de escrever. Se um usuário é dono de uma linha, ele pode lê-la. Você escreve uma regra verificando se auth.uid() = user_id.

Mas portais de clientes raramente são tão simples. Geralmente você tem organizações, equipes, contratados externos e diferentes funções. Um projeto pode pertencer a uma organização, e um usuário é membro dessa organização com uma função específica. Para verificar se um usuário pode ler um registro de projeto, o banco de dados precisa consultar uma tabela de junção.

À medida que o esquema do seu banco de dados cresce, a IA precisa acompanhar todos esses relacionamentos. No momento em que você pede à IA uma nova funcionalidade, pode ocorrer a deriva da janela de contexto. A IA pode escrever uma nova consulta que ignora a lógica de RLS existente ou simplifica a política para fazer o código funcionar, abrindo o acesso para usuários não autorizados.

2. Falhas silenciosas na lógica SQL

As políticas do PostgreSQL falham silenciosamente. Se você escreve uma política com erro, o PostgreSQL não trava seu app. Ele ou bloqueia todo o acesso ou, se for mal configurado, permite que qualquer pessoa leia os dados.

Modelos de IA costumam cometer erros sutis com valores nulos de SQL ou lógica booleana. Por exemplo, uma política como esta:

create policy "Users can view company data" on companies
  for select using (
    auth.uid() in (select user_id from members where company_id = id)
    or public_access = true
  );

Se o mecanismo do banco de dados avaliar public_access como nulo, ou se a subconsulta retornar nulo de forma inesperada, a política pode ser avaliada como verdadeira para todos os usuários autenticados. Uma IA pode gerar esse código porque ele parece sintaticamente correto, mas falta o tratamento de casos extremos exigido para ambientes reais de produção.

3. A lacuna de testes

Desenvolvedores profissionais não apenas escrevem políticas de RLS; eles criam suítes de testes para verificá-las. Eles usam ferramentas como pgTAP para simular diferentes sessões de usuário e confirmar que um cliente não consegue consultar dados de outro.

Geradores de código de IA não escrevem esses testes, a menos que você peça explicitamente, e mesmo assim, executar testes de segurança no nível do banco de dados em um ambiente gerado por IA é complexo. Sem suítes de testes automatizados, você fica tentando adivinhar se suas políticas são seguras. Você só descobre que elas estão quebradas quando um cliente liga perguntando por que consegue ver o dashboard de outra empresa.

Esquemas de permissão visuais: a alternativa no-code

Se você não quer auditar código PostgreSQL ou gerenciar suítes de testes, precisa de um paradigma de segurança diferente. Esquemas de permissão visuais, como os usados no Softr, substituem o código personalizado do banco de dados por regras estruturadas e impostas pela plataforma.

Em vez de escrever instruções SQL para filtrar linhas, você configura suas regras de acesso usando um painel de configurações visual.

Mapeamento visual vs. scripting SQL

Enquanto configurações tradicionais exigem a escrita de políticas personalizadas de banco de dados, construtores modernos dependem de configurações visuais. No Softr, você define grupos de usuários com base em atributos do banco de dados. Por exemplo, você pode criar um grupo chamado “Usuários do Portal do Cliente” onde o ID da empresa coincide com o ID da empresa do usuário logado.

Uma vez definidos, você aplica esses grupos diretamente a páginas, blocos e ações. A plataforma cuida do roteamento de backend e das consultas ao banco de dados automaticamente. O bloco do frontend não recebe o conjunto de dados completo; em vez disso, o servidor filtra a fonte de dados antes de renderizar o bloco.

Bancos de dados nativamente seguros

Quando você usa o Softr Databases como sua camada de dados nativa, a segurança no nível da linha já vem integrada à conexão desde o início. Você não escreve regras de segurança diretamente nas tabelas do banco de dados - não há SQL gerado para auditar, nem scripts de migração para executar, nem políticas para manter. A camada de integração restringe o acesso às consultas por padrão, então não há código gerado que possa sofrer deriva, quebrar ou expor registros acidentalmente após uma alteração no esquema.

Se um grupo de usuários tem permissão apenas para ler registros onde o status é “Ativo” e o campo de cliente coincide com a conta deles, o mecanismo de interface impõe esse filtro no nível da consulta. O cliente não consegue manipular a requisição da API para buscar registros inativos ou linhas de outros clientes, pois o servidor de backend ignora parâmetros não autorizados.

O Softr também se conecta a mais de 17 fontes externas - incluindo Airtable e Google Sheets - caso você precise trazer dados que já gerencia em outro lugar. As mesmas regras visuais de grupo de usuários se aplicam, independentemente de onde os dados estejam.

O fardo da manutenção de código gerado

Criar um portal de clientes não é um evento único. Suas regras de negócio vão mudar. Você adicionará novos níveis de clientes, introduzirá estruturas de projetos aninhadas ou mudará a forma como os administradores revisam documentos enviados.

Em uma aplicação de código gerado construída com ferramentas como Bolt ou Lovable, cada mudança de layout ou atualização de relacionamento exige a refatoração do esquema do banco de dados e a reescrita de suas políticas de segurança. Você depende da IA para:

  • Ler todo o código para entender o esquema existente.
  • Gerar um script de migração sem quebrar os dados existentes.
  • Reescrever as regras de RLS para acomodar os novos relacionamentos.
  • Atualizar o frontend em React para enviar os headers e tokens corretos.

Este é o problema do “Segundo Dia”. Um único comando pode quebrar uma política de segurança que funcionava anteriormente, e você pode não perceber até que o código já esteja implantado em produção.

Com o Softr, você faz essas alterações sem tocar no código. Você pode usar o AI Co-Builder para descrever a mudança necessária - “adicione um grupo de usuários Gerente que possa aprovar envios de projetos” - e ele atualiza os grupos de usuários, páginas e permissões simultaneamente. Ou você pode fazer a alteração manualmente no painel de configurações, se preferir. De qualquer forma, não há SQL gerado para auditar depois e nenhum risco de uma regressão na política de segurança ir silenciosamente para produção.

Melhores práticas de segurança para seu portal de clientes

Se você está construindo um portal que lida com dados empresariais sensíveis, mantenha estas diretrizes em mente:

Pare de confiar em filtros de frontend

Nunca assuma que os dados estão seguros só porque estão escondidos na interface. Sempre verifique se a sua API de backend ou fonte de dados está filtrando as informações antes de serem enviadas. Se a sua plataforma não suporta filtragem segura no backend, não a utilize para portais de clientes.

Mantenha as funções de usuário simples

Evite hierarquias de permissão excessivamente complexas. Se suas permissões forem complicadas demais para um humano auditar facilmente, uma IA terá dificuldade em escrevê-las corretamente. Atenha-se a grupos de usuários claros e distintos, como Administradores, Gerentes e Clientes.

Escolha ferramentas estruturadas para softwares operacionais

Geradores de código de IA são ótimos para validação, prototipagem e construção de interfaces de SaaS para o consumidor final. Mas quando seu requisito principal é segurança operacional, isolamento de dados e estabilidade a longo prazo, uma plataforma no-code estruturada é a escolha mais segura.

Ao utilizar uma plataforma que isola as configurações de segurança do código de layout, você garante que atualizações de estilo nunca exponham acidentalmente seu banco de dados à internet pública. Você obtém um portal seguro e profissional rodando sobre uma base previsível, permitindo que você foque nos seus clientes em vez de debugar políticas de banco de dados.