Apply monthly payment RLS policy
Apply the SQL policy to ensure that transactions are only inserted if the user is within the trial period or has an approved payment for the current month.
This commit is contained in:
parent
5a1e6a222d
commit
f16b060416
@ -0,0 +1,29 @@
|
||||
|
||||
-- Ativar Row Level Security na tabela transacoes
|
||||
ALTER TABLE public.transacoes ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Excluir todas as policies antigas de insert para evitar conflito
|
||||
DROP POLICY IF EXISTS "Permitir inserts apenas para assinantes ou trial" ON public.transacoes;
|
||||
|
||||
-- Policy permitindo insert apenas se o usuário está no trial de 30 dias
|
||||
-- OU possui pagamento aprovado do mês vigente na pagamentos_mercadopago
|
||||
CREATE POLICY "Permitir inserts apenas com trial ativo ou pagamento aprovado do mês"
|
||||
ON public.transacoes
|
||||
FOR INSERT
|
||||
WITH CHECK (
|
||||
EXISTS (SELECT 1 FROM public.usuarios u WHERE u.email = login)
|
||||
AND (
|
||||
-- Está dentro do período trial (primeiros 30 dias)
|
||||
(SELECT NOW() < u.created_at + INTERVAL '30 days' FROM public.usuarios u WHERE u.email = login)
|
||||
-- OU possui pagamento aprovado para o mês vigente
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM public.pagamentos_mercadopago p
|
||||
WHERE p.payer_email = login
|
||||
AND p.status = 'approved'
|
||||
AND date_trunc('month', p.created_at) = date_trunc('month', NOW())
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
-- Permissão para os usuários autenticados continuarem acessando normalmente as outras operações
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON public.transacoes TO authenticated;
|
||||
Loading…
Reference in New Issue
Block a user