From c88a145658cc65578f4af7ec83991a0fe468b566 Mon Sep 17 00:00:00 2001 From: htlee Date: Mon, 16 Feb 2026 23:26:13 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=84=A4=EC=A0=95=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 2 + src/auth/AuthProvider.tsx | 4 +- src/pages/admin/RoleManagement.tsx | 9 +- src/pages/admin/SettingsPage.tsx | 168 +++++++++++++++++++++++++++++ src/types/index.ts | 6 ++ src/utils/navigation.ts | 1 + 6 files changed, 187 insertions(+), 3 deletions(-) create mode 100644 src/pages/admin/SettingsPage.tsx diff --git a/src/App.tsx b/src/App.tsx index b378586..221a8af 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -13,6 +13,7 @@ import { UserManagement } from './pages/admin/UserManagement'; import { RoleManagement } from './pages/admin/RoleManagement'; import { PermissionManagement } from './pages/admin/PermissionManagement'; import { StatsPage } from './pages/admin/StatsPage'; +import { SettingsPage } from './pages/admin/SettingsPage'; function App() { return ( @@ -36,6 +37,7 @@ function App() { } /> } /> } /> + } /> } /> diff --git a/src/auth/AuthProvider.tsx b/src/auth/AuthProvider.tsx index c006ac3..d4b9150 100644 --- a/src/auth/AuthProvider.tsx +++ b/src/auth/AuthProvider.tsx @@ -12,11 +12,11 @@ import { AuthContext } from './AuthContext'; const DEV_MOCK_USER: User = { id: 1, email: 'htlee@gcsc.co.kr', - name: '이현태 (DEV)', + name: '김개발 (DEV)', avatarUrl: null, status: 'ACTIVE', isAdmin: true, - roles: [{ id: 1, name: 'ADMIN', description: '관리자', urlPatterns: ['/**'] }], + roles: [{ id: 1, name: 'ADMIN', description: '관리자', urlPatterns: ['/**'], defaultGrant: false }], createdAt: new Date().toISOString(), lastLoginAt: new Date().toISOString(), }; diff --git a/src/pages/admin/RoleManagement.tsx b/src/pages/admin/RoleManagement.tsx index fde0e5e..c71d471 100644 --- a/src/pages/admin/RoleManagement.tsx +++ b/src/pages/admin/RoleManagement.tsx @@ -93,7 +93,14 @@ export function RoleManagement() { roles.map((role) => (
-

{role.name}

+
+

{role.name}

+ {role.defaultGrant && ( + + 기본 + + )} +
+
+ +
+ + {/* 기본 부여 롤 */} +
+

기본 부여 롤

+

+ 자동 승인 시 신규 사용자에게 배정되는 롤입니다. +

+ + {roles.length === 0 ? ( +

등록된 롤이 없습니다.

+ ) : ( +
+ {roles.map((role) => ( + + ))} +
+ )} +
+
+ + {/* 안내 / 경고 */} +
+ {isAutoApprove && ( + + @gcsc.co.kr 도메인 사용자가 가입 즉시 ACTIVE 상태가 + 되며, 기본 부여 롤이 자동 배정됩니다. + + )} + {isAutoApprove && defaultGrantCount === 0 && ( + + 자동 승인이 활성화되어 있지만 기본 부여 롤이 없습니다. 신규 사용자에게 롤이 배정되지 + 않아 접근 가능한 페이지가 제한될 수 있습니다. + + )} +
+
+ + ); +} diff --git a/src/types/index.ts b/src/types/index.ts index 8d0c292..0cda702 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -17,6 +17,7 @@ export interface Role { name: string; description: string; urlPatterns: string[]; + defaultGrant: boolean; } export interface AuthResponse { @@ -73,3 +74,8 @@ export interface LoginHistory { ipAddress: string; userAgent: string; } + +export interface RegistrationSettings { + autoApprove: boolean; + defaultRoles: Role[]; +} diff --git a/src/utils/navigation.ts b/src/utils/navigation.ts index 197f5da..6789177 100644 --- a/src/utils/navigation.ts +++ b/src/utils/navigation.ts @@ -16,6 +16,7 @@ export const ADMIN_NAV: NavItem[] = [ { path: '/admin/users', label: '사용자 관리' }, { path: '/admin/roles', label: '롤 관리' }, { path: '/admin/permissions', label: '권한 관리' }, + { path: '/admin/settings', label: '설정' }, { path: '/admin/stats', label: '통계' }, ]; -- 2.45.2