First commit - backup RDOC
This commit is contained in:
93
fix_permissions_rls.sql
Normal file
93
fix_permissions_rls.sql
Normal file
@@ -0,0 +1,93 @@
|
||||
-- ============================================================================
|
||||
-- SCRIPT DE CORREÇÃO TOTAL DE PERMISSÕES (RLS) - TRACKSTEEL RDO
|
||||
-- ============================================================================
|
||||
-- OBJETIVO: Garantir que o usuário consiga ler seu próprio perfil (para saber que é Dev)
|
||||
-- e que o Super Admin tenha acesso irrestrito.
|
||||
-- ============================================================================
|
||||
|
||||
-- 1. TABELA USUARIOS (A MAIS IMPORTANTE)
|
||||
-- ============================================================================
|
||||
ALTER TABLE public.usuarios ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Limpar policies antigas para evitar conflitos
|
||||
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;
|
||||
|
||||
-- 1.1. REGRA BÁSICA: Todo usuário autenticado pode ler SEUS PRÓPRIOS DADOS
|
||||
-- Sem isso, o sistema não sabe quem você é.
|
||||
CREATE POLICY "Permitir leitura do próprio perfil" ON public.usuarios
|
||||
FOR SELECT USING (auth.uid() = id);
|
||||
|
||||
-- 1.2. REGRA DE EDIÇÃO: Usuário pode atualizar seus dados básicos
|
||||
CREATE POLICY "Atualizar proprio perfil" ON public.usuarios
|
||||
FOR UPDATE USING (auth.uid() = id);
|
||||
|
||||
-- 1.3. REGRA DO SUPER ADMIN (Hardcoded para segurança máxima no momento)
|
||||
-- O email admtracksteel@gmail.com pode FAZER TUDO em usuarios.
|
||||
CREATE POLICY "Super Admin Total" ON public.usuarios
|
||||
FOR ALL USING (
|
||||
(SELECT email FROM auth.users WHERE id = auth.uid()) = 'admtracksteel@gmail.com'
|
||||
);
|
||||
|
||||
-- 2. TABELA ORGANIZACOES
|
||||
-- ============================================================================
|
||||
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;
|
||||
|
||||
-- 2.1. Leitura: Usuários veem sua própria organização OU Super Admin vê todas
|
||||
CREATE POLICY "Leitura Organizacoes" ON public.organizacoes
|
||||
FOR SELECT USING (
|
||||
id = (SELECT organizacao_id FROM public.usuarios WHERE id = auth.uid())
|
||||
OR
|
||||
(SELECT role FROM public.usuarios WHERE id = auth.uid()) = 'dev'
|
||||
);
|
||||
|
||||
-- 2.2. Escrita: Apenas DEV pode criar/editar organizações (por enquanto)
|
||||
CREATE POLICY "Escrita Organizacoes Super Admin" ON public.organizacoes
|
||||
FOR ALL USING (
|
||||
(SELECT role FROM public.usuarios WHERE id = auth.uid()) = 'dev'
|
||||
);
|
||||
|
||||
|
||||
-- 3. REFORÇAR CONFIGURAÇÕES (Configs Globais)
|
||||
-- ============================================================================
|
||||
-- Garantir que tabelas de configuração sejam legíveis por todos que estão logados
|
||||
ALTER TABLE public.tipos_atividade ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS "Leitura Geral Configs" ON public.tipos_atividade;
|
||||
CREATE POLICY "Leitura Geral Configs" ON public.tipos_atividade
|
||||
FOR SELECT USING (auth.uid() IS NOT NULL);
|
||||
|
||||
DROP POLICY IF EXISTS "Escrita Admin Configs" ON public.tipos_atividade;
|
||||
CREATE POLICY "Escrita Admin Configs" ON public.tipos_atividade
|
||||
FOR ALL USING (
|
||||
(SELECT role FROM public.usuarios WHERE id = auth.uid()) IN ('dev', 'admin')
|
||||
);
|
||||
|
||||
-- (Repetir lógica para as outras tabelas essencialmente garante acesso)
|
||||
-- Aplicando o mesmo conceito para condicoes_climaticas, etc de forma simplificada:
|
||||
-- Se precisar rodar para todas, o script setup_full_db.sql já cobriu,
|
||||
-- mas aqui o foco é desbloquear o ACESSO AO USUÁRIO/ADMIN.
|
||||
|
||||
|
||||
-- 4. FORÇAR (NOVAMENTE) O CARGO DEV PARA O SUPER ADMIN
|
||||
-- ============================================================================
|
||||
-- Bypass RLS para garantir que o update ocorra agora no banco.
|
||||
UPDATE public.usuarios
|
||||
SET role = 'dev', ativo = true
|
||||
WHERE email = 'admtracksteel@gmail.com';
|
||||
|
||||
-- Caso não exista na tabela usuarios (mas exista no Auth), insere forçado:
|
||||
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;
|
||||
|
||||
-- ============================================================================
|
||||
-- FIM DO SCRIPT DE CORREÇÃO
|
||||
-- ============================================================================
|
||||
Reference in New Issue
Block a user