Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
co-authored by
renee-png
parent
f0687633b6
commit
01692742da
@@ -0,0 +1,63 @@
|
||||
-- Custom client fields (admin-defined)
|
||||
CREATE TABLE public.custom_client_fields (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
key text NOT NULL UNIQUE,
|
||||
label text NOT NULL,
|
||||
field_type text NOT NULL DEFAULT 'text',
|
||||
description text,
|
||||
sort_order integer NOT NULL DEFAULT 0,
|
||||
active boolean NOT NULL DEFAULT true,
|
||||
created_by uuid,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
ALTER TABLE public.custom_client_fields ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
CREATE POLICY ccf_client_select_auth ON public.custom_client_fields
|
||||
FOR SELECT TO authenticated USING (true);
|
||||
CREATE POLICY ccf_client_insert_admin ON public.custom_client_fields
|
||||
FOR INSERT TO authenticated WITH CHECK (is_admin(auth.uid()));
|
||||
CREATE POLICY ccf_client_update_admin ON public.custom_client_fields
|
||||
FOR UPDATE TO authenticated USING (is_admin(auth.uid()));
|
||||
CREATE POLICY ccf_client_delete_admin ON public.custom_client_fields
|
||||
FOR DELETE TO authenticated USING (is_admin(auth.uid()));
|
||||
|
||||
CREATE TRIGGER trg_ccf_client_updated_at
|
||||
BEFORE UPDATE ON public.custom_client_fields
|
||||
FOR EACH ROW EXECUTE FUNCTION public.tg_set_updated_at();
|
||||
|
||||
-- Per-client values
|
||||
CREATE TABLE public.client_field_values (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
client_id uuid NOT NULL REFERENCES public.clients(id) ON DELETE CASCADE,
|
||||
field_id uuid NOT NULL REFERENCES public.custom_client_fields(id) ON DELETE CASCADE,
|
||||
value text,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now(),
|
||||
UNIQUE (client_id, field_id)
|
||||
);
|
||||
|
||||
ALTER TABLE public.client_field_values ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Anyone authenticated can view; admins or client creator can manage
|
||||
CREATE POLICY clfv_select_auth ON public.client_field_values
|
||||
FOR SELECT TO authenticated USING (true);
|
||||
CREATE POLICY clfv_insert_auth ON public.client_field_values
|
||||
FOR INSERT TO authenticated WITH CHECK (auth.uid() IS NOT NULL);
|
||||
CREATE POLICY clfv_update_auth ON public.client_field_values
|
||||
FOR UPDATE TO authenticated USING (
|
||||
is_admin(auth.uid())
|
||||
OR EXISTS (SELECT 1 FROM public.clients c WHERE c.id = client_id AND c.created_by = auth.uid())
|
||||
);
|
||||
CREATE POLICY clfv_delete_auth ON public.client_field_values
|
||||
FOR DELETE TO authenticated USING (
|
||||
is_admin(auth.uid())
|
||||
OR EXISTS (SELECT 1 FROM public.clients c WHERE c.id = client_id AND c.created_by = auth.uid())
|
||||
);
|
||||
|
||||
CREATE TRIGGER trg_clfv_updated_at
|
||||
BEFORE UPDATE ON public.client_field_values
|
||||
FOR EACH ROW EXECUTE FUNCTION public.tg_set_updated_at();
|
||||
|
||||
CREATE INDEX idx_client_field_values_client ON public.client_field_values(client_id);
|
||||
Reference in New Issue
Block a user