tasq/supabase/migrations/20260311121000_create_storage_buckets.sql

48 lines
2.2 KiB
SQL

-- Ensure the buckets exist by inserting directly into the system table.
-- This matches the pattern used by older migrations and avoids relying on
-- optional SQL wrapper functions that may not be installed in all projects.
INSERT INTO storage.buckets (id, name, public)
VALUES ('apk_updates', 'apk_updates', true)
ON CONFLICT (id) DO NOTHING;
-- Ensure a `cors` column exists on storage.buckets for self-hosted installs
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'storage' AND table_name = 'buckets' AND column_name = 'cors'
) THEN
ALTER TABLE storage.buckets ADD COLUMN cors jsonb;
END IF;
END
$$;
-- Set bucket to public (idempotent) and populate a basic CORS rule for local development.
-- Adjust or remove origins as appropriate for production.
-- NOTE: bucket public/CORS is intentionally left to dashboard or manual configuration
-- to ensure compatibility with self-hosted Supabase instances. If you need to
-- programmatically set `public` or `cors` on your environment, run an update
-- in the SQL editor with values appropriate for your deployment.
-- storage object policies for the apk_updates bucket
-- Create policies in the same style as other buckets (e.g. it_service_attachments)
DROP POLICY IF EXISTS "Authenticated users can upload apk_updates" ON storage.objects;
CREATE POLICY "Authenticated users can upload apk_updates"
ON storage.objects FOR INSERT TO authenticated
WITH CHECK (bucket_id = 'apk_updates');
DROP POLICY IF EXISTS "Authenticated users can read apk_updates" ON storage.objects;
CREATE POLICY "Authenticated users can read apk_updates"
ON storage.objects FOR SELECT TO authenticated
USING (bucket_id = 'apk_updates');
DROP POLICY IF EXISTS "Authenticated users can delete apk_updates" ON storage.objects;
CREATE POLICY "Authenticated users can delete apk_updates"
ON storage.objects FOR DELETE TO authenticated
USING (bucket_id = 'apk_updates');
-- Note: some self-hosted Supabase installations may require manual CORS configuration
-- via the dashboard. This migration sets a CORS value in the buckets table when
-- possible and marks the bucket public; if uploads still fail with CORS errors,
-- update the bucket settings in the Supabase UI to add the correct origin(s).