176 lines
7.2 KiB
SQL
176 lines
7.2 KiB
SQL
-- ============================================================================
|
|
-- CORREÇÃO DEFINITIVA E BRUTAL DE RLS - TRACKSTEEL RDO
|
|
-- ============================================================================
|
|
-- Execute este script DEPOIS que o app estiver funcionando com RLS desabilitado
|
|
-- ============================================================================
|
|
|
|
-- 1. GARANTIR QUE O SUPER ADMIN EXISTE E TEM CARGO DEV
|
|
-- ============================================================================
|
|
UPDATE public.usuarios
|
|
SET role = 'dev', ativo = true
|
|
WHERE email = 'admtracksteel@gmail.com';
|
|
|
|
INSERT INTO public.usuarios (id, email, nome, role, ativo)
|
|
SELECT id, email, 'Super Admin', 'dev', true
|
|
FROM auth.users
|
|
WHERE email = 'admtracksteel@gmail.com'
|
|
ON CONFLICT (id) DO UPDATE SET role = 'dev', ativo = true;
|
|
|
|
-- 2. REABILITAR RLS NA TABELA USUARIOS
|
|
-- ============================================================================
|
|
ALTER TABLE public.usuarios ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- 3. LIMPAR TODAS AS POLICIES ANTIGAS
|
|
-- ============================================================================
|
|
DROP POLICY IF EXISTS "Permitir leitura do próprio perfil" ON public.usuarios;
|
|
DROP POLICY IF EXISTS "Dev e Admins veem todos usuarios" ON public.usuarios;
|
|
DROP POLICY IF EXISTS "Super Admin Total" ON public.usuarios;
|
|
DROP POLICY IF EXISTS "Atualizar proprio perfil" ON public.usuarios;
|
|
DROP POLICY IF EXISTS "Users can view own profile" ON public.usuarios;
|
|
DROP POLICY IF EXISTS "Users can update own profile" ON public.usuarios;
|
|
DROP POLICY IF EXISTS "Admins can view all profiles" ON public.usuarios;
|
|
|
|
-- 4. CRIAR POLICIES CORRETAS E SIMPLES
|
|
-- ============================================================================
|
|
|
|
-- 4.1. TODO USUÁRIO PODE LER SEU PRÓPRIO PERFIL (ESSENCIAL!)
|
|
CREATE POLICY "Users can view own profile" ON public.usuarios
|
|
FOR SELECT
|
|
USING (auth.uid() = id);
|
|
|
|
-- 4.2. TODO USUÁRIO PODE ATUALIZAR SEU PRÓPRIO PERFIL
|
|
CREATE POLICY "Users can update own profile" ON public.usuarios
|
|
FOR UPDATE
|
|
USING (auth.uid() = id);
|
|
|
|
-- 4.3. USUÁRIOS COM ROLE 'dev' OU 'admin' PODEM VER TODOS OS PERFIS
|
|
CREATE POLICY "Admins can view all profiles" ON public.usuarios
|
|
FOR SELECT
|
|
USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) IN ('dev', 'admin')
|
|
);
|
|
|
|
-- 4.4. USUÁRIOS COM ROLE 'dev' PODEM FAZER TUDO
|
|
CREATE POLICY "Dev can do everything" ON public.usuarios
|
|
FOR ALL
|
|
USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) = 'dev'
|
|
);
|
|
|
|
-- 5. ORGANIZAÇÕES - POLICIES SIMPLES
|
|
-- ============================================================================
|
|
ALTER TABLE public.organizacoes ENABLE ROW LEVEL SECURITY;
|
|
|
|
DROP POLICY IF EXISTS "Leitura Organizacoes" ON public.organizacoes;
|
|
DROP POLICY IF EXISTS "Escrita Organizacoes Super Admin" ON public.organizacoes;
|
|
DROP POLICY IF EXISTS "Users view own org" ON public.organizacoes;
|
|
DROP POLICY IF EXISTS "Dev view all orgs" ON public.organizacoes;
|
|
DROP POLICY IF EXISTS "Dev manage orgs" ON public.organizacoes;
|
|
|
|
-- Usuários veem sua própria organização
|
|
CREATE POLICY "Users view own org" ON public.organizacoes
|
|
FOR SELECT
|
|
USING (
|
|
id = (SELECT organizacao_id FROM public.usuarios WHERE id = auth.uid())
|
|
);
|
|
|
|
-- Dev vê todas as organizações
|
|
CREATE POLICY "Dev view all orgs" ON public.organizacoes
|
|
FOR SELECT
|
|
USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) = 'dev'
|
|
);
|
|
|
|
-- Dev pode gerenciar organizações
|
|
CREATE POLICY "Dev manage orgs" ON public.organizacoes
|
|
FOR ALL
|
|
USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) = 'dev'
|
|
);
|
|
|
|
-- 6. TABELAS DE CONFIGURAÇÃO - ACESSO TOTAL PARA AUTENTICADOS
|
|
-- ============================================================================
|
|
|
|
-- Tipos de Atividade
|
|
ALTER TABLE public.tipos_atividade ENABLE ROW LEVEL SECURITY;
|
|
DROP POLICY IF EXISTS "Leitura Geral Configs" ON public.tipos_atividade;
|
|
DROP POLICY IF EXISTS "Escrita Admin Configs" ON public.tipos_atividade;
|
|
DROP POLICY IF EXISTS "Escrita Configs" ON public.tipos_atividade;
|
|
|
|
CREATE POLICY "Anyone authenticated can read" ON public.tipos_atividade
|
|
FOR SELECT USING (auth.uid() IS NOT NULL);
|
|
|
|
CREATE POLICY "Admins can manage" ON public.tipos_atividade
|
|
FOR ALL USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) IN ('dev', 'admin')
|
|
);
|
|
|
|
-- Condições Climáticas
|
|
ALTER TABLE public.condicoes_climaticas ENABLE ROW LEVEL SECURITY;
|
|
DROP POLICY IF EXISTS "Leitura Geral Configs Clima" ON public.condicoes_climaticas;
|
|
DROP POLICY IF EXISTS "Escrita Configs Clima" ON public.condicoes_climaticas;
|
|
|
|
CREATE POLICY "Anyone authenticated can read clima" ON public.condicoes_climaticas
|
|
FOR SELECT USING (auth.uid() IS NOT NULL);
|
|
|
|
CREATE POLICY "Admins can manage clima" ON public.condicoes_climaticas
|
|
FOR ALL USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) IN ('dev', 'admin')
|
|
);
|
|
|
|
-- Tipos de Ocorrência
|
|
ALTER TABLE public.tipos_ocorrencia ENABLE ROW LEVEL SECURITY;
|
|
DROP POLICY IF EXISTS "Leitura Geral Configs Ocorrencia" ON public.tipos_ocorrencia;
|
|
DROP POLICY IF EXISTS "Escrita Configs Ocorrencia" ON public.tipos_ocorrencia;
|
|
|
|
CREATE POLICY "Anyone authenticated can read ocorrencia" ON public.tipos_ocorrencia
|
|
FOR SELECT USING (auth.uid() IS NOT NULL);
|
|
|
|
CREATE POLICY "Admins can manage ocorrencia" ON public.tipos_ocorrencia
|
|
FOR ALL USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) IN ('dev', 'admin')
|
|
);
|
|
|
|
-- Funções/Cargos
|
|
ALTER TABLE public.funcoes_cargos ENABLE ROW LEVEL SECURITY;
|
|
DROP POLICY IF EXISTS "Leitura Geral Configs Funcoes" ON public.funcoes_cargos;
|
|
DROP POLICY IF EXISTS "Escrita Configs Funcoes" ON public.funcoes_cargos;
|
|
|
|
CREATE POLICY "Anyone authenticated can read funcoes" ON public.funcoes_cargos
|
|
FOR SELECT USING (auth.uid() IS NOT NULL);
|
|
|
|
CREATE POLICY "Admins can manage funcoes" ON public.funcoes_cargos
|
|
FOR ALL USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) IN ('dev', 'admin')
|
|
);
|
|
|
|
-- Equipamentos
|
|
ALTER TABLE public.equipamentos ENABLE ROW LEVEL SECURITY;
|
|
DROP POLICY IF EXISTS "Leitura Geral Configs Equip" ON public.equipamentos;
|
|
DROP POLICY IF EXISTS "Escrita Configs Equip" ON public.equipamentos;
|
|
|
|
CREATE POLICY "Anyone authenticated can read equip" ON public.equipamentos
|
|
FOR SELECT USING (auth.uid() IS NOT NULL);
|
|
|
|
CREATE POLICY "Admins can manage equip" ON public.equipamentos
|
|
FOR ALL USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) IN ('dev', 'admin')
|
|
);
|
|
|
|
-- Materiais
|
|
ALTER TABLE public.materiais ENABLE ROW LEVEL SECURITY;
|
|
DROP POLICY IF EXISTS "Leitura Geral Configs Mat" ON public.materiais;
|
|
DROP POLICY IF EXISTS "Escrita Configs Mat" ON public.materiais;
|
|
|
|
CREATE POLICY "Anyone authenticated can read mat" ON public.materiais
|
|
FOR SELECT USING (auth.uid() IS NOT NULL);
|
|
|
|
CREATE POLICY "Admins can manage mat" ON public.materiais
|
|
FOR ALL USING (
|
|
(SELECT role FROM public.usuarios WHERE id = auth.uid()) IN ('dev', 'admin')
|
|
);
|
|
|
|
-- ============================================================================
|
|
-- FIM - AGORA O RLS ESTÁ CONFIGURADO CORRETAMENTE
|
|
-- ============================================================================
|