36 lines
1.1 KiB
SQL
36 lines
1.1 KiB
SQL
-- Créer le bucket pour les images
|
|
INSERT INTO storage.buckets (id, name, public, file_size_limit, allowed_mime_types)
|
|
VALUES (
|
|
'images',
|
|
'images',
|
|
true,
|
|
5242880, -- 5MB max
|
|
ARRAY['image/jpeg', 'image/png', 'image/gif', 'image/webp']
|
|
)
|
|
ON CONFLICT (id) DO NOTHING;
|
|
|
|
-- Politique: Tout le monde peut voir les images publiques
|
|
CREATE POLICY "Images publiques accessibles" ON storage.objects
|
|
FOR SELECT USING (bucket_id = 'images');
|
|
|
|
-- Politique: Utilisateurs authentifiés peuvent uploader
|
|
CREATE POLICY "Users authentifies peuvent uploader" ON storage.objects
|
|
FOR INSERT WITH CHECK (
|
|
bucket_id = 'images'
|
|
AND auth.role() = 'authenticated'
|
|
);
|
|
|
|
-- Politique: Admins peuvent tout faire sur les images
|
|
CREATE POLICY "Admins gestion complete images" ON storage.objects
|
|
FOR ALL USING (
|
|
bucket_id = 'images'
|
|
AND EXISTS (SELECT 1 FROM admins WHERE user_id = auth.uid())
|
|
);
|
|
|
|
-- Politique: Users peuvent supprimer leurs propres uploads
|
|
CREATE POLICY "Users peuvent supprimer leurs images" ON storage.objects
|
|
FOR DELETE USING (
|
|
bucket_id = 'images'
|
|
AND auth.uid()::text = (storage.foldername(name))[1]
|
|
);
|