Visão Geral do Sistema
Acompanhe estatísticas, usuários e a saúde da plataforma.
Total de Usuários
-
Inquilinos, proprietários e corretores
Imóveis Cadastrados
-
Anúncios ativos no catálogo
Propostas Enviadas
-
Propostas de aluguel e compra
| Nome | E-mail / Telefone | Perfil | CPF | Status | Ações |
|---|
| Imóvel | Tipo | Transação | Preço | Proprietário | Corretor | Status | Ações |
|---|
| Nome do Corretor | E-mail / Telefone | CRECI | Agência | Imóveis Associados | Ações |
|---|
O Supabase utiliza políticas de segurança a nível de linha para garantir que usuários não editem nem visualizem dados alheios. Para que esta tela administrativa de Gestão de Usuários e Imóveis funcione com 100% de autonomia e segurança, as políticas RLS administrativas precisam estar cadastradas no seu banco de dados.
- Acesse a sua conta e o projeto no painel do Supabase Dashboard.
- Acesse o menu lateral esquerdo na seção SQL Editor.
- Crie uma nova consulta clicando em New Query.
- Copie o código SQL abaixo clicando no botão de cópia e cole no editor do Supabase.
- Clique em Run (no canto inferior direito do painel). Pronto!
-- ============================================================
-- DOISQ — Migration 010: Políticas RLS para Administradores
-- ============================================================
DROP POLICY IF EXISTS "usuarios: admin select" ON usuarios;
CREATE POLICY "usuarios: admin select" ON usuarios
FOR SELECT USING (
(auth.jwt() -> 'user_metadata' ->> 'perfil') = 'admin'
);
DROP POLICY IF EXISTS "usuarios: admin all" ON usuarios;
CREATE POLICY "usuarios: admin all" ON usuarios
FOR ALL USING (
(auth.jwt() -> 'user_metadata' ->> 'perfil') = 'admin'
);
DROP POLICY IF EXISTS "perfis: admin all" ON perfis;
CREATE POLICY "perfis: admin all" ON perfis
FOR ALL USING (
EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND perfil = 'admin')
);
DROP POLICY IF EXISTS "corretores: admin all" ON corretores;
CREATE POLICY "corretores: admin all" ON corretores
FOR ALL USING (
EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND perfil = 'admin')
);
DROP POLICY IF EXISTS "imoveis: admin select" ON imoveis;
CREATE POLICY "imoveis: admin select" ON imoveis
FOR SELECT USING (
EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND perfil = 'admin')
);
DROP POLICY IF EXISTS "imoveis: admin all" ON imoveis;
CREATE POLICY "imoveis: admin all" ON imoveis
FOR ALL USING (
EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND perfil = 'admin')
) WITH CHECK (
EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND perfil = 'admin')
);
DROP POLICY IF EXISTS "imagens_imovel: admin all" ON imagens_imovel;
CREATE POLICY "imagens_imovel: admin all" ON imagens_imovel
FOR ALL USING (
EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND perfil = 'admin')
);
-- ============================================================
-- DOISQ — Migration 020: Função para Alteração de Senha por Admin
-- ============================================================
CREATE OR REPLACE FUNCTION public.admin_alterar_senha(
usuario_id UUID,
nova_senha TEXT
)
RETURNS VOID
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
BEGIN
-- 1. Verifica se quem está executando a função é um administrador
IF NOT EXISTS (
SELECT 1 FROM public.usuarios
WHERE id = auth.uid() AND perfil = 'admin'
) THEN
RAISE EXCEPTION 'Acesso negado: apenas administradores podem alterar senhas.';
END IF;
-- 2. Valida o tamanho mínimo da senha
IF nova_senha IS NULL OR length(nova_senha) < 6 THEN
RAISE EXCEPTION 'A senha deve conter no mínimo 6 caracteres.';
END IF;
-- 3. Atualiza na tabela auth.users do Supabase usando a extensão pgcrypto
UPDATE auth.users
SET
encrypted_password = crypt(nova_senha, gen_salt('bf')),
updated_at = now()
WHERE id = usuario_id;
END;
$$;
-- 4. Garante que usuários autenticados possam invocar a função via RPC
GRANT EXECUTE ON FUNCTION public.admin_alterar_senha(UUID, TEXT) TO authenticated;
| Ícone | Nome | Categoria | Tipos de Imóvel | Ações |
|---|
| Ícone | Nome / Slug | Ordem | Status | Ações |
|---|
Ajuste as configurações globais da plataforma, como limites de imóveis e outros parâmetros de negócio.
Caso a tabela de configurações ainda não tenha sido criada no seu banco de dados Supabase, copie o código abaixo e execute-o no SQL Editor do seu projeto.
-- ============================================================
-- DOISQ — Migration 026: Configurações do Sistema e Limites Gratuitos
-- ============================================================
CREATE TABLE IF NOT EXISTS configuracoes (
chave TEXT PRIMARY KEY,
valor TEXT NOT NULL,
descricao TEXT,
atualizado_em TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
INSERT INTO configuracoes (chave, valor, descricao)
VALUES
('limite_gratuito_corretor', '2', 'Limite máximo de anúncios ativos permitidos para corretores no plano gratuito'),
('limite_gratuito_imobiliaria', '2', 'Limite máximo de anúncios ativos permitidos para imobiliárias no plano gratuito'),
('valor_consulta_score', '9.90', 'Preço cobrado por consulta individual de score de crédito'),
('valor_assinatura_contrato', '19.90', 'Preço cobrado por assinatura digital de contrato')
ON CONFLICT (chave) DO UPDATE SET
valor = EXCLUDED.valor,
descricao = EXCLUDED.descricao;
ALTER TABLE configuracoes ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "configuracoes: leitura publica" ON configuracoes;
CREATE POLICY "configuracoes: leitura publica" ON configuracoes FOR SELECT USING (true);
DROP POLICY IF EXISTS "configuracoes: admin all" ON configuracoes;
CREATE POLICY "configuracoes: admin all" ON configuracoes FOR ALL
USING (EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND perfil = 'admin'))
WITH CHECK (EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND perfil = 'admin'));
GRANT ALL ON configuracoes TO postgres, service_role;
GRANT SELECT ON configuracoes TO anon, authenticated;
| Nome / Slug | Público-Alvo | Preço Mensal | Limite de Imóveis | Limite de Usuários | Ações |
|---|
| Usuário | Perfil de Usuário | OpenAI GPT-4 | Rápida Local | Total de Utilizações | Última Utilização |
|---|