feat(web): 관리자 CRM 웹페이지 — admin role + 4개 페이지
- 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 네비게이션 추가
This commit is contained in:
parent
d3c2a4348d
commit
667c09242b
10 changed files with 816 additions and 0 deletions
31
server/supabase/migrations/20260413000002_admin_role.sql
Normal file
31
server/supabase/migrations/20260413000002_admin_role.sql
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
-- 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')
|
||||
);
|
||||
Loading…
Add table
Add a link
Reference in a new issue