Appearance
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')
)
);