mirror of
https://github.com/renee-png/acmcc.git
synced 2026-06-21 09:50:01 +00:00
Add ACMCC app source, Supabase backend, and project config
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
|
||||
-- Store Google Drive OAuth tokens for admin users
|
||||
CREATE TABLE public.google_drive_tokens (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE NOT NULL UNIQUE,
|
||||
access_token TEXT NOT NULL,
|
||||
refresh_token TEXT NOT NULL,
|
||||
token_expires_at TIMESTAMPTZ NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
ALTER TABLE public.google_drive_tokens ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
CREATE POLICY "Admins can manage their own tokens"
|
||||
ON public.google_drive_tokens
|
||||
FOR ALL
|
||||
TO authenticated
|
||||
USING (
|
||||
user_id = auth.uid()
|
||||
AND (public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager'))
|
||||
)
|
||||
WITH CHECK (
|
||||
user_id = auth.uid()
|
||||
AND (public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager'))
|
||||
);
|
||||
|
||||
-- Track which Drive files/folders are shared and with whom
|
||||
CREATE TABLE public.shared_drive_files (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
drive_file_id TEXT NOT NULL,
|
||||
drive_file_name TEXT NOT NULL,
|
||||
drive_mime_type TEXT,
|
||||
drive_icon_link TEXT,
|
||||
drive_web_view_link TEXT,
|
||||
is_folder BOOLEAN NOT NULL DEFAULT false,
|
||||
shared_by UUID REFERENCES auth.users(id) ON DELETE SET NULL,
|
||||
association_ids UUID[] DEFAULT '{}',
|
||||
visibility TEXT[] NOT NULL DEFAULT '{admin}',
|
||||
parent_shared_id UUID REFERENCES public.shared_drive_files(id) ON DELETE CASCADE,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
ALTER TABLE public.shared_drive_files ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Staff can manage shared files
|
||||
CREATE POLICY "Staff can manage shared drive files"
|
||||
ON public.shared_drive_files
|
||||
FOR ALL
|
||||
TO authenticated
|
||||
USING (
|
||||
public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager')
|
||||
)
|
||||
WITH CHECK (
|
||||
public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'manager')
|
||||
);
|
||||
|
||||
-- Board members and homeowners can view files shared with them
|
||||
CREATE POLICY "Users can view files shared with their role or association"
|
||||
ON public.shared_drive_files
|
||||
FOR SELECT
|
||||
TO authenticated
|
||||
USING (
|
||||
public.has_role(auth.uid(), 'admin')
|
||||
OR public.has_role(auth.uid(), 'manager')
|
||||
OR (
|
||||
'board_member' = ANY(visibility)
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM public.board_members bm
|
||||
WHERE bm.user_id = auth.uid()
|
||||
AND bm.association_id = ANY(shared_drive_files.association_ids)
|
||||
)
|
||||
)
|
||||
OR (
|
||||
'homeowner' = ANY(visibility)
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM public.owners o
|
||||
WHERE o.user_id = auth.uid()
|
||||
AND o.association_id = ANY(shared_drive_files.association_ids)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE TRIGGER update_google_drive_tokens_updated_at
|
||||
BEFORE UPDATE ON public.google_drive_tokens
|
||||
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
|
||||
|
||||
CREATE TRIGGER update_shared_drive_files_updated_at
|
||||
BEFORE UPDATE ON public.shared_drive_files
|
||||
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
|
||||
Reference in New Issue
Block a user