← todos os posts

"É só ligar o RLS" e outras frases que não ajudam ninguém

A resposta está certa no diagnóstico e inútil como ajuda. A anatomia da frase que não ajuda, o que RLS é em uma linha, e o que pedir de volta.

"RLS desligado no Supabase/Firebase daí qualquer um com conhecimento básico leva seus dados pelo terminal do chrome."

É um programador brasileiro, numa newsletter, falando de app feito com IA. E eu quero começar dizendo que ele está certo. O diagnóstico é preciso: é a falha mais comum, é grave, e é assim mesmo que acontece.

Agora lê de novo, como quem não sabe o que é RLS. O que você faz depois de ler isso?

Nada. Não tem o que fazer. A frase te informa que você está em perigo e vai embora.

Há duas semanas escrevi sobre o tutorial que pula etapas — a omissão. Hoje é sobre outra coisa, mais irritante: a resposta vazia. A que aparece quando você pergunta, e vem certa, e não serve.

Anatomia da frase que não ajuda

Ela tem sempre as mesmas quatro peças:

  1. Descreve o problema com precisão. Não é chute. Quem escreveu sabe.
  2. Usa a sigla sem traduzir. RLS, IDOR, service role. Quem não é da área fica com o susto e sem o significado.
  3. Não diz o que fazer. Nem onde clicar, nem o que pedir, nem como saber se resolveu.
  4. Vai embora. É a última mensagem do assunto.

A combinação é o estrago. Se fosse imprecisa, você ignorava. Como está certa, você acredita — e fica com um medo sem instrução de uso.

E tem o "é só". É só ligar o RLS. O "é só" não descreve a tarefa. Descreve quem escreveu: pra ele, é só. Pra você, é uma sigla.

A prova de que dava pra explicar

Quero mostrar que a explicação cabia na mesma frase. Se cabe aqui, cabia lá.

RLS é Row-Level Security, segurança no nível da linha: uma regra do banco de dados que impede um usuário de ver o dado do outro. Cada linha da tabela — cada pedido, cada cliente — tem dono, e a regra diz: só o dono lê.

Pronto. Uma frase. Quem sabe consegue escrever isso; quem escreve "é só ligar o RLS" escolheu não escrever.

E agora a parte que a frase esconde, e que faz dela não só inútil mas incompleta. A documentação do Supabase diz duas coisas em sequência. A primeira: uma tabela sem RLS "pode ser lida e alterada por qualquer papel que tenha permissão sobre ela" — na prática, por qualquer um com a chave pública do app, que é pública mesmo. A segunda, logo abaixo: "depois que o RLS é ligado, nenhum dado fica acessível pela API até que você crie as regras".

Leia a segunda de novo. Ligar o interruptor sem escrever as regras deixa o app em branco. Nenhum dado aparece. Pra ninguém.

Isso explica uma cena que se repete: a pessoa liga o RLS porque mandaram, o app fica vazio, ela entra em pânico e desliga. A tabela volta a aparecer no painel do Supabase com o aviso vermelho Unrestricted — sem restrição. Tem discussão pública no repositório do Supabase de gente perguntando por que todas as tabelas amanheceram assim. É relato de comunidade, não medição — mas o mecanismo é esse: "é só ligar" pulou dois dos três passos. Ligar, escrever a regra, testar. Quem disse "é só" sabia dos três.

O contraponto honesto

Nem toda resposta vazia é desdém. Muita vez é alguém sem tempo, respondendo de graça, num fórum, entre uma reunião e outra. Escrever "é só ligar o RLS" leva cinco segundos; escrever os três passos leva vinte minutos. Ninguém é pago pelos vinte minutos.

A crítica não é a essa pessoa. É a isso ter virado a documentação. Quando a resposta de cinco segundos é a única que existe, ela deixa de ser um comentário apressado e vira o manual. E manual que só assusta não é manual.

O que fazer hoje, em três parágrafos

A prova final de que a explicação cabe: o teste inteiro, resumido. A versão completa, com os três testes, está aqui.

Crie duas contas no seu próprio app, em dois navegadores (um normal, um anônimo). Com a conta A, crie um item — um pedido, um cliente. Olhe o endereço na barra: costuma terminar com um número, tipo /pedido/1043. Anote.

Com a conta B, logada no outro navegador, digite esse mesmo endereço. Se aparecer "não encontrado" ou "sem permissão", a regra existe. Se o pedido da conta A abrir na tela da B, a regra não existe — e agora você sabe o que aquela frase queria dizer.

Achou o problema? O pedido pra IA é este, uma tabela por vez:

"Ligue o RLS na tabela de pedidos e escreva a regra: cada usuário só lê, cria, altera e apaga as linhas em que o dono é ele. Depois me diga como eu confiro isso com duas contas."

E rode o teste de novo. Não aceite "pronto".

O que pedir de volta

Fecho com a devolutiva que transforma resposta vazia em ajuda. Quando você receber um "é só ligar o RLS", responda:

"Me mostra onde eu clico."

Cinco palavras. Quem sabe e quer ajudar, mostra — e você acabou de ganhar o tutorial que faltava. Quem só queria marcar que sabia, some. Nos dois casos você ganhou: ou a instrução, ou a informação de que ali não tinha instrução.

Isso é o D do ciclo que eu ensino: definir. Saber nomear o problema com precisão suficiente pra pedir a coisa certa — pra IA, pro fórum, pro dev que você contratar. Quem consegue dizer "eu preciso de uma regra no banco que impeça o usuário B de ler a linha do A" já não é refém de sigla nenhuma.

E é uma sigla de várias. Tem a chave que foi parar no navegador, a rota de admin que só esconde o botão, o aviso de pagamento que chega duas vezes. Cada uma tem a sua frase de cinco segundos — e cada uma tem os três passos que a frase pulou.

Fontes