Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
co-authored by
renee-png
parent
bfdd4c655e
commit
5520ba109e
@@ -0,0 +1,88 @@
|
||||
-- Allow payment_plans to be attached to a case directly
|
||||
ALTER TABLE public.payment_plans
|
||||
ADD COLUMN IF NOT EXISTS case_id UUID REFERENCES public.cases(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE public.payment_plans
|
||||
ALTER COLUMN collection_id DROP NOT NULL;
|
||||
|
||||
ALTER TABLE public.payment_plans
|
||||
DROP CONSTRAINT IF EXISTS pp_case_or_collection;
|
||||
ALTER TABLE public.payment_plans
|
||||
ADD CONSTRAINT pp_case_or_collection CHECK (case_id IS NOT NULL OR collection_id IS NOT NULL);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_payment_plans_case ON public.payment_plans(case_id);
|
||||
|
||||
-- Installment fields for online + manual payments
|
||||
ALTER TABLE public.payment_plan_installments
|
||||
ADD COLUMN IF NOT EXISTS payment_request_id UUID REFERENCES public.payment_requests(id) ON DELETE SET NULL,
|
||||
ADD COLUMN IF NOT EXISTS paid_method TEXT,
|
||||
ADD COLUMN IF NOT EXISTS paid_reference TEXT;
|
||||
|
||||
-- Update RLS to also allow case-based access
|
||||
DROP POLICY IF EXISTS pp_select ON public.payment_plans;
|
||||
DROP POLICY IF EXISTS pp_insert ON public.payment_plans;
|
||||
DROP POLICY IF EXISTS pp_update ON public.payment_plans;
|
||||
DROP POLICY IF EXISTS pp_delete ON public.payment_plans;
|
||||
|
||||
CREATE POLICY pp_select ON public.payment_plans FOR SELECT TO authenticated USING (
|
||||
(case_id IS NOT NULL AND public.can_access_case(case_id, auth.uid()))
|
||||
OR (collection_id IS NOT NULL AND EXISTS (SELECT 1 FROM public.collections c WHERE c.id = collection_id AND public.can_access_case(c.case_id, auth.uid())))
|
||||
);
|
||||
CREATE POLICY pp_insert ON public.payment_plans FOR INSERT TO authenticated WITH CHECK (
|
||||
(case_id IS NOT NULL AND public.can_access_case(case_id, auth.uid()))
|
||||
OR (collection_id IS NOT NULL AND EXISTS (SELECT 1 FROM public.collections c WHERE c.id = collection_id AND public.can_access_case(c.case_id, auth.uid())))
|
||||
);
|
||||
CREATE POLICY pp_update ON public.payment_plans FOR UPDATE TO authenticated USING (
|
||||
(case_id IS NOT NULL AND public.can_access_case(case_id, auth.uid()))
|
||||
OR (collection_id IS NOT NULL AND EXISTS (SELECT 1 FROM public.collections c WHERE c.id = collection_id AND public.can_access_case(c.case_id, auth.uid())))
|
||||
);
|
||||
CREATE POLICY pp_delete ON public.payment_plans FOR DELETE TO authenticated USING (
|
||||
(case_id IS NOT NULL AND public.can_access_case(case_id, auth.uid()))
|
||||
OR (collection_id IS NOT NULL AND EXISTS (SELECT 1 FROM public.collections c WHERE c.id = collection_id AND public.can_access_case(c.case_id, auth.uid())))
|
||||
);
|
||||
|
||||
DROP POLICY IF EXISTS ppi_select ON public.payment_plan_installments;
|
||||
DROP POLICY IF EXISTS ppi_insert ON public.payment_plan_installments;
|
||||
DROP POLICY IF EXISTS ppi_update ON public.payment_plan_installments;
|
||||
DROP POLICY IF EXISTS ppi_delete ON public.payment_plan_installments;
|
||||
|
||||
CREATE POLICY ppi_select ON public.payment_plan_installments FOR SELECT TO authenticated USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.payment_plans p
|
||||
LEFT JOIN public.collections c ON c.id = p.collection_id
|
||||
WHERE p.id = plan_id AND (
|
||||
(p.case_id IS NOT NULL AND public.can_access_case(p.case_id, auth.uid()))
|
||||
OR (c.id IS NOT NULL AND public.can_access_case(c.case_id, auth.uid()))
|
||||
)
|
||||
)
|
||||
);
|
||||
CREATE POLICY ppi_insert ON public.payment_plan_installments FOR INSERT TO authenticated WITH CHECK (
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.payment_plans p
|
||||
LEFT JOIN public.collections c ON c.id = p.collection_id
|
||||
WHERE p.id = plan_id AND (
|
||||
(p.case_id IS NOT NULL AND public.can_access_case(p.case_id, auth.uid()))
|
||||
OR (c.id IS NOT NULL AND public.can_access_case(c.case_id, auth.uid()))
|
||||
)
|
||||
)
|
||||
);
|
||||
CREATE POLICY ppi_update ON public.payment_plan_installments FOR UPDATE TO authenticated USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.payment_plans p
|
||||
LEFT JOIN public.collections c ON c.id = p.collection_id
|
||||
WHERE p.id = plan_id AND (
|
||||
(p.case_id IS NOT NULL AND public.can_access_case(p.case_id, auth.uid()))
|
||||
OR (c.id IS NOT NULL AND public.can_access_case(c.case_id, auth.uid()))
|
||||
)
|
||||
)
|
||||
);
|
||||
CREATE POLICY ppi_delete ON public.payment_plan_installments FOR DELETE TO authenticated USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.payment_plans p
|
||||
LEFT JOIN public.collections c ON c.id = p.collection_id
|
||||
WHERE p.id = plan_id AND (
|
||||
(p.case_id IS NOT NULL AND public.can_access_case(p.case_id, auth.uid()))
|
||||
OR (c.id IS NOT NULL AND public.can_access_case(c.case_id, auth.uid()))
|
||||
)
|
||||
)
|
||||
);
|
||||
Reference in New Issue
Block a user