-- ============================================ -- Storage Bucket Update - Policies aktualisieren -- ============================================ -- Dieses Script aktualisiert die bestehenden Policies -- 1. Lösche bestehende Policies (falls vorhanden) DROP POLICY IF EXISTS "Users can upload their own images" ON storage.objects; DROP POLICY IF EXISTS "Public images are publicly accessible" ON storage.objects; DROP POLICY IF EXISTS "Users can update their own images" ON storage.objects; DROP POLICY IF EXISTS "Users can delete their own images" ON storage.objects; -- 2. Erstelle Bucket (falls nicht vorhanden) INSERT INTO storage.buckets (id, name, public, file_size_limit, allowed_mime_types) VALUES ( 'user-uploads', 'user-uploads', true, 10485760, -- 10MB ARRAY['image/jpeg', 'image/jpg', 'image/png', 'image/webp']::text[] ) ON CONFLICT (id) DO UPDATE SET public = EXCLUDED.public, file_size_limit = EXCLUDED.file_size_limit, allowed_mime_types = EXCLUDED.allowed_mime_types; -- 3. Erstelle Policies neu CREATE POLICY "Users can upload their own images" ON storage.objects FOR INSERT TO authenticated WITH CHECK ( bucket_id = 'user-uploads' AND (storage.foldername(name))[1] = auth.uid()::text ); CREATE POLICY "Public images are publicly accessible" ON storage.objects FOR SELECT TO public USING (bucket_id = 'user-uploads'); CREATE POLICY "Users can update their own images" ON storage.objects FOR UPDATE TO authenticated USING ( bucket_id = 'user-uploads' AND (storage.foldername(name))[1] = auth.uid()::text ) WITH CHECK ( bucket_id = 'user-uploads' AND (storage.foldername(name))[1] = auth.uid()::text ); CREATE POLICY "Users can delete their own images" ON storage.objects FOR DELETE TO authenticated USING ( bucket_id = 'user-uploads' AND (storage.foldername(name))[1] = auth.uid()::text ); -- ============================================ -- Überprüfung -- ============================================ -- Bucket-Details SELECT id, name, public, file_size_limit, allowed_mime_types FROM storage.buckets WHERE id = 'user-uploads'; -- Policies SELECT policyname, cmd, roles FROM pg_policies WHERE tablename = 'objects' AND ( policyname ILIKE '%upload%' OR policyname ILIKE '%public images%' OR policyname ILIKE '%update%' OR policyname ILIKE '%delete%' ) ORDER BY policyname;