-- Create storage bucket for user avatars
-- Similar to book covers but for profile pictures
-- Create the avatars storage bucket
INSERT INTO storage.buckets (id, name, public, file_size_limit, allowed_mime_types)
VALUES (
'avatars',
'avatars',
true,
2097152, -- 2MB limit for avatars
ARRAY['image/jpeg', 'image/png', 'image/webp', 'image/gif']
)
ON CONFLICT (id) DO NOTHING;
-- Enable RLS on the storage.objects table for our bucket
-- Allow public viewing of avatars
CREATE POLICY "Public avatars are viewable by everyone" ON storage.objects
FOR SELECT
USING (bucket_id = 'avatars');
-- Allow authenticated users to upload avatars
CREATE POLICY "Users can upload their own avatars" ON storage.objects
FOR INSERT
WITH CHECK (
bucket_id = 'avatars'
AND auth.role() = 'authenticated'
);
-- Allow users to update their own avatars
CREATE POLICY "Users can update their own avatars" ON storage.objects
FOR UPDATE
USING (
bucket_id = 'avatars'
AND auth.uid()::text = (storage.foldername(name))[1]
)
WITH CHECK (
bucket_id = 'avatars'
AND auth.uid()::text = (storage.foldername(name))[1]
);
-- Allow users to delete their own avatars
CREATE POLICY "Users can delete their own avatars" ON storage.objects
FOR DELETE
USING (
bucket_id = 'avatars'
AND auth.uid()::text = (storage.foldername(name))[1]
);