Files
tracksteel_app/supabase/migrations/20250816175120_20677db7-6a43-4489-a71b-60146398e389.sql

66 lines
2.2 KiB
SQL

-- Verificar as políticas atuais da tabela solicitacoes_compra
-- e criar/ajustar políticas para permitir que compradores atualizem status
-- Primeiro, vamos remover políticas existentes que possam estar bloqueando
DROP POLICY IF EXISTS "Usuários autenticados podem atualizar solicitações" ON public.solicitacoes_compra;
DROP POLICY IF EXISTS "Usuarios podem atualizar suas solicitacoes" ON public.solicitacoes_compra;
-- Criar política específica para compradores poderem atualizar qualquer solicitação
CREATE POLICY "Compradores podem atualizar status de solicitações"
ON public.solicitacoes_compra
FOR UPDATE
USING (
-- Permitir se é o criador da solicitação OU se é comprador
(auth.uid() = created_by) OR
EXISTS (
SELECT 1 FROM public.profiles p
JOIN public.functions f ON p.function_id = f.id
WHERE p.id = auth.uid()
AND (
lower(f.name) LIKE '%compra%' OR
lower(f.name) LIKE '%comprador%' OR
lower(f.name) LIKE '%suprimento%'
)
) OR
-- Também permitir se tem role admin
EXISTS (
SELECT 1 FROM public.user_roles ur
WHERE ur.user_id = auth.uid() AND ur.role = 'admin'
)
);
-- Criar política para inserção (caso não exista)
CREATE POLICY IF NOT EXISTS "Usuários autenticados podem criar solicitações"
ON public.solicitacoes_compra
FOR INSERT
WITH CHECK (auth.uid() IS NOT NULL AND auth.uid() = created_by);
-- Criar política para visualização (caso não exista)
CREATE POLICY IF NOT EXISTS "Usuários autenticados podem visualizar solicitações"
ON public.solicitacoes_compra
FOR SELECT
USING (auth.uid() IS NOT NULL);
-- Criar política para deletar (apenas criador, comprador ou admin)
CREATE POLICY IF NOT EXISTS "Compradores e criadores podem deletar solicitações"
ON public.solicitacoes_compra
FOR DELETE
USING (
(auth.uid() = created_by) OR
EXISTS (
SELECT 1 FROM public.profiles p
JOIN public.functions f ON p.function_id = f.id
WHERE p.id = auth.uid()
AND (
lower(f.name) LIKE '%compra%' OR
lower(f.name) LIKE '%comprador%' OR
lower(f.name) LIKE '%suprimento%'
)
) OR
EXISTS (
SELECT 1 FROM public.user_roles ur
WHERE ur.user_id = auth.uid() AND ur.role = 'admin'
)
);