Skip to content
Loafacto 문서/참고 문서/web-ui 문서/20. supabase-storage-assets-policy.sql

20. supabase-storage-assets-policy.sql

원본 파일: 'C:\Repository\loafacto-hub\docs\web-ui\20. supabase-storage-assets-policy.sql'

sql
-- =============================================================================
-- assets 버킷 Storage RLS 정책
-- 사전 조건: Supabase 대시보드 > Storage에서 "assets" 버킷을 Public으로 생성
-- 주의: 버킷이 Public이어도 INSERT/UPDATE/DELETE는 별도 정책이 없으면 차단됨
-- 용도: 사이트 로고 등 공용 정적 자산 업로드
-- 쓰기 권한: user_roles 테이블 기준 super_admin, operator
-- =============================================================================

-- 1. 누구나 읽기 (Public 버킷이지만 명시적으로 선언)
CREATE POLICY "assets: public read"
ON storage.objects
FOR SELECT
TO public
USING (bucket_id = 'assets');

-- 2. super_admin / operator 업로드
CREATE POLICY "assets: admin insert"
ON storage.objects
FOR INSERT
TO authenticated
WITH CHECK (
  bucket_id = 'assets'
  AND EXISTS (
    SELECT 1 FROM public.user_roles
    WHERE user_id = auth.uid()
      AND role IN ('super_admin', 'operator')
  )
);

-- 3. super_admin / operator 덮어쓰기 (upsert 시 필요)
CREATE POLICY "assets: admin update"
ON storage.objects
FOR UPDATE
TO authenticated
USING (
  bucket_id = 'assets'
  AND EXISTS (
    SELECT 1 FROM public.user_roles
    WHERE user_id = auth.uid()
      AND role IN ('super_admin', 'operator')
  )
);

-- 4. super_admin / operator 삭제
CREATE POLICY "assets: admin delete"
ON storage.objects
FOR DELETE
TO authenticated
USING (
  bucket_id = 'assets'
  AND EXISTS (
    SELECT 1 FROM public.user_roles
    WHERE user_id = auth.uid()
      AND role IN ('super_admin', 'operator')
  )
);