mirror of
https://github.com/renee-png/acmcc.git
synced 2026-06-21 01:40:01 +00:00
183fe0a93c
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
77 lines
2.7 KiB
SQL
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();
|