- migration: profiles.role 컬럼 + admin RLS 정책 - admin-guard.ts: RSC용 admin 권한 체크 - /admin: CRM 대시보드 (총 유저, 유료 구독자, API 호출, 만료 예정) - /admin/users: 유저 목록 (검색/필터/페이지네이션) - /admin/users/[id]: 유저 상세 (프로필+구독+30일 사용량) - /admin/subscriptions: 구독 목록 (상태 필터) - /admin/usage: 사용량 집계 (7/14/30일) - Sidebar에 Admin 네비게이션 추가
31 lines
1 KiB
SQL
31 lines
1 KiB
SQL
-- Phase 3.3: 관리자 역할 + RLS 정책
|
|
-- profiles.role 컬럼 추가 + admin 전용 SELECT 정책
|
|
|
|
-- 1. role 컬럼
|
|
ALTER TABLE public.profiles
|
|
ADD COLUMN IF NOT EXISTS role text NOT NULL DEFAULT 'user';
|
|
|
|
ALTER TABLE public.profiles
|
|
ADD CONSTRAINT profiles_role_check
|
|
CHECK (role IN ('user', 'admin'));
|
|
|
|
-- 2. Admin RLS: 모든 profiles 조회
|
|
CREATE POLICY "admin_read_all_profiles" ON public.profiles
|
|
FOR SELECT TO authenticated
|
|
USING (
|
|
EXISTS (SELECT 1 FROM public.profiles p WHERE p.id = auth.uid() AND p.role = 'admin')
|
|
);
|
|
|
|
-- 3. Admin RLS: 모든 subscriptions 조회
|
|
CREATE POLICY "admin_read_all_subscriptions" ON public.subscriptions
|
|
FOR SELECT TO authenticated
|
|
USING (
|
|
EXISTS (SELECT 1 FROM public.profiles p WHERE p.id = auth.uid() AND p.role = 'admin')
|
|
);
|
|
|
|
-- 4. Admin RLS: 모든 daily_usage 조회
|
|
CREATE POLICY "admin_read_all_daily_usage" ON public.daily_usage
|
|
FOR SELECT TO authenticated
|
|
USING (
|
|
EXISTS (SELECT 1 FROM public.profiles p WHERE p.id = auth.uid() AND p.role = 'admin')
|
|
);
|