Spaces:
Running
Running
/* | |
# Update codette_files table and policies | |
1. New Tables | |
- Ensures codette_files table exists with proper structure | |
- id (uuid, primary key) | |
- filename (text) | |
- storage_path (text) | |
- file_type (text, nullable) | |
- uploaded_at (timestamptz) | |
- created_at (timestamptz) | |
2. Security | |
- Enables RLS if not already enabled | |
- Adds admin-specific policies for file management | |
*/ | |
-- Create table if it doesn't exist | |
CREATE TABLE IF NOT EXISTS public.codette_files ( | |
id uuid PRIMARY KEY DEFAULT gen_random_uuid(), | |
filename text NOT NULL, | |
storage_path text NOT NULL, | |
file_type text, | |
uploaded_at timestamptz DEFAULT now(), | |
created_at timestamptz DEFAULT now() | |
); | |
-- Enable Row Level Security (idempotent operation) | |
ALTER TABLE public.codette_files ENABLE ROW LEVEL SECURITY; | |
-- Drop existing policies to avoid conflicts | |
DROP POLICY IF EXISTS "Allow authenticated users to read files" ON public.codette_files; | |
DROP POLICY IF EXISTS "Allow authenticated users to insert files" ON public.codette_files; | |
DROP POLICY IF EXISTS "Allow admin users to manage files" ON public.codette_files; | |
DROP POLICY IF EXISTS "Allow admin users to insert files" ON public.codette_files; | |
-- Create new policies | |
CREATE POLICY "Allow authenticated users to read files" | |
ON public.codette_files | |
FOR SELECT | |
TO authenticated | |
USING (true); | |
CREATE POLICY "Allow authenticated users to insert files" | |
ON public.codette_files | |
FOR INSERT | |
TO authenticated | |
WITH CHECK (true); | |
-- Add admin-specific policies | |
CREATE POLICY "Allow admin users to manage files" | |
ON public.codette_files | |
FOR ALL | |
TO authenticated | |
USING ((auth.jwt() ->> 'role'::text) = 'admin'::text) | |
WITH CHECK ((auth.jwt() ->> 'role'::text) = 'admin'::text); | |
CREATE POLICY "Allow admin users to insert files" | |
ON public.codette_files | |
FOR INSERT | |
TO authenticated | |
WITH CHECK ((auth.jwt() ->> 'role'::text) = 'admin'::text); |