66 lines
2.2 KiB
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'
|
|
)
|
|
);
|