Files
acmcc/supabase/migrations/20260326170726_5f8d33d5-f84a-483e-9bff-86b2860bca59.sql
T
2026-06-01 20:19:26 -04:00

77 lines
2.7 KiB
SQL

-- Collaborative documents table
CREATE TABLE public.collaborative_documents (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
association_id uuid REFERENCES public.associations(id) ON DELETE CASCADE NOT NULL,
title text NOT NULL,
content text DEFAULT '',
created_by uuid NOT NULL,
locked_by uuid DEFAULT NULL,
locked_at timestamptz DEFAULT NULL,
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now()
);
-- Edit history log
CREATE TABLE public.document_edit_history (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
document_id uuid REFERENCES public.collaborative_documents(id) ON DELETE CASCADE NOT NULL,
user_id uuid NOT NULL,
user_name text NOT NULL,
user_color text NOT NULL DEFAULT '#3b82f6',
change_summary text,
content_snapshot text,
created_at timestamptz NOT NULL DEFAULT now()
);
-- Enable RLS
ALTER TABLE public.collaborative_documents ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.document_edit_history ENABLE ROW LEVEL SECURITY;
-- Staff can do anything
CREATE POLICY "Staff full access to collaborative_documents"
ON public.collaborative_documents FOR ALL TO authenticated
USING (
public.has_role(auth.uid(), 'admin') OR
public.has_role(auth.uid(), 'manager') OR
public.has_role(auth.uid(), 'employee')
);
-- Board members can access docs for their associations
CREATE POLICY "Board members access collaborative_documents"
ON public.collaborative_documents FOR ALL TO authenticated
USING (association_id IN (SELECT public.get_user_association_ids()));
-- Staff full access to edit history
CREATE POLICY "Staff full access to document_edit_history"
ON public.document_edit_history FOR ALL TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.collaborative_documents d
WHERE d.id = document_id AND (
public.has_role(auth.uid(), 'admin') OR
public.has_role(auth.uid(), 'manager') OR
public.has_role(auth.uid(), 'employee')
)
)
);
-- Board members access edit history for their association docs
CREATE POLICY "Board members access document_edit_history"
ON public.document_edit_history FOR ALL TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.collaborative_documents d
WHERE d.id = document_id AND d.association_id IN (SELECT public.get_user_association_ids())
)
);
-- Enable realtime for edit history
ALTER PUBLICATION supabase_realtime ADD TABLE public.document_edit_history;
ALTER PUBLICATION supabase_realtime ADD TABLE public.collaborative_documents;
-- Updated_at trigger
CREATE TRIGGER update_collaborative_documents_updated_at
BEFORE UPDATE ON public.collaborative_documents
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();