Appearance
11. supabase-banners-table.sql
원본 파일: 'C:\Repository\loafacto-hub\docs\web-ui\11. supabase-banners-table.sql'
sql
-- =============================================================================
-- 배너/팝업(banner_slots) 테이블 — 점검 배너, 이벤트 배너, 전체 공지 팝업
-- user_roles 적용 후 Supabase SQL Editor에서 실행하세요.
-- =============================================================================
CREATE TABLE IF NOT EXISTS public.banner_slots (
slot_type text PRIMARY KEY CHECK (slot_type IN ('maintenance', 'event', 'notice_popup')),
enabled boolean NOT NULL DEFAULT false,
title text NOT NULL DEFAULT '',
message text NOT NULL DEFAULT '',
link text,
start_at timestamptz,
end_at timestamptz,
updated_at timestamptz
);
COMMENT ON TABLE public.banner_slots IS '배너/팝업 슬롯 3종: 점검 안내(maintenance), 이벤트 배너(event), 전체 공지 팝업(notice_popup).';
-- 초기 행 3개
INSERT INTO public.banner_slots (slot_type, enabled, title, message, link, updated_at) VALUES
('maintenance', false, '점검 안내', '일시적인 점검 중입니다. 잠시 후 다시 이용해 주세요.', null, now()),
('event', false, '이벤트', '진행 중인 이벤트를 확인하세요.', '', now()),
('notice_popup', false, '공지', '', null, now())
ON CONFLICT (slot_type) DO NOTHING;
-- RLS
ALTER TABLE public.banner_slots ENABLE ROW LEVEL SECURITY;
-- SELECT: 누구나 조회 (메인 화면에서 비로그인 포함 노출용)
CREATE POLICY "Anyone can read banner_slots"
ON public.banner_slots FOR SELECT
TO public
USING (true);
-- UPDATE: 관리자만 수정
CREATE POLICY "Only admins can update banner_slots"
ON public.banner_slots FOR UPDATE
TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.user_roles r
WHERE r.user_id = auth.uid() AND r.role IN ('super_admin', 'operator')
)
)
WITH CHECK (
EXISTS (
SELECT 1 FROM public.user_roles r
WHERE r.user_id = auth.uid() AND r.role IN ('super_admin', 'operator')
)
);
GRANT SELECT ON public.banner_slots TO anon;
GRANT SELECT ON public.banner_slots TO authenticated;
GRANT UPDATE ON public.banner_slots TO authenticated;