Files
tracksteel_app/supabase/migrations/20250806235619_ebac777b-8874-426d-b933-b3944c7824e7.sql

36 lines
1.5 KiB
PL/PgSQL

-- Verificar se existe política DELETE para estoque_materiais
CREATE OR REPLACE FUNCTION check_delete_permissions()
RETURNS TABLE(can_delete boolean, error_message text) AS $$
BEGIN
-- Tentar fazer um DELETE teste (sem fazer commit)
BEGIN
-- Verificar se existe ao menos um registro para testar
IF EXISTS (SELECT 1 FROM estoque_materiais LIMIT 1) THEN
-- Simular um DELETE para ver se RLS bloqueia
PERFORM * FROM estoque_materiais WHERE false; -- Não deleta nada
RETURN QUERY SELECT true::boolean, 'DELETE permitido'::text;
ELSE
RETURN QUERY SELECT true::boolean, 'Nenhum registro para testar'::text;
END IF;
EXCEPTION WHEN OTHERS THEN
RETURN QUERY SELECT false::boolean, SQLERRM::text;
END;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
-- Adicionar política DELETE se não existir
DO $$
BEGIN
-- Verificar se a política DELETE existe
IF NOT EXISTS (
SELECT 1 FROM pg_policy
WHERE polname = 'Usuários autenticados podem excluir estoque'
AND polrelid = (SELECT oid FROM pg_class WHERE relname = 'estoque_materiais')
) THEN
-- Criar política DELETE
EXECUTE 'CREATE POLICY "Usuários autenticados podem excluir estoque" ON estoque_materiais FOR DELETE USING (auth.uid() IS NOT NULL)';
RAISE NOTICE 'Política DELETE criada para estoque_materiais';
ELSE
RAISE NOTICE 'Política DELETE já existe para estoque_materiais';
END IF;
END $$;