11 KiB
11 KiB
관리자단 기능 개발 설계서
웹 기능목록 CSV(관리자단 PWB-020000) 기준 · Auth 프로젝트와 동일한 방식으로 구현
참조 CSV: docs/종량제 관련 자료/종량제 개발목록/종량제_개발목록_20260127(웹 기능목록) (1).csv
참조 구현: app/Controllers/Auth.php, app/Views/auth/, app/Models/MemberModel.php, app/Config/Routes.php
1. Auth 프로젝트 구조 (참조 패턴)
1.1 디렉터리/파일 구조
app/
├── Controllers/
│ └── Auth.php # showLoginForm, login, logout, showRegisterForm, register
├── Models/
│ ├── MemberModel.php # 회원 CRUD, findByLoginId
│ └── MemberLogModel.php # 로그인 이력
├── Views/
│ └── auth/
│ ├── login.php # 로그인 폼
│ └── register.php # 회원가입 폼
└── Config/
└── Routes.php # login, logout, register 라우트
1.2 네이밍 규칙
| 구분 | 규칙 | 예시 |
|---|---|---|
| 컨트롤러 | PascalCase, 단수/역할명 | Auth, Home |
| 메서드 | camelCase, 동사+명사 | showLoginForm, login |
| 뷰 폴더 | 컨트롤러명 소문자 | auth/, home/ |
| 뷰 파일 | 소문자+언더스코어 | login.php, register.php |
| 라우트 URI | 소문자, 케밥 또는 경로 | login, logout, register |
| 모델 | PascalCase + Model | MemberModel, MemberLogModel |
1.3 라우트 패턴 (Auth 기준)
// GET = 폼 표시 (showXxxForm 또는 index)
// POST = 처리 (login, register)
$routes->get('login', 'Auth::showLoginForm');
$routes->post('login', 'Auth::login');
$routes->get('logout', 'Auth::logout');
$routes->get('register', 'Auth::showRegisterForm');
$routes->post('register', 'Auth::register');
1.4 컨트롤러 메서드 패턴
- 폼 표시:
showXxxForm()→return view('auth/xxx'); - 처리:
xxx()→ 유효성 검사 → Model 호출 →redirect()->to(...)->with(...) - 유효성:
$this->validate($rules, $messages)사용 - 에러 시:
redirect()->back()->withInput()->with('errors', ...)
1.5 뷰 공통 사항
base_url(),csrf_field(),esc(),old()사용- 플래시:
session()->getFlashdata('success'),getFlashdata('error'),getFlashdata('errors')
2. 관리자단 기능 목록 (CSV 매핑)
| No | SFR 2레벨 | SFR 3레벨 | 기능 ID | 기능명 | 비고 |
|---|---|---|---|---|---|
| 4 | PWB-020100 | PWB-020101 | PWB-020101-001 | 사용자 권한 관리 | 권한 등록/수정/삭제, 역할별 설명 |
| 5 | PWB-020200 | PWB-020201 | PWB-020201-001 | 사용자 관리 | 사용자 등록/수정/삭제(삭제상태 5년 유지) |
| 6 | PWB-020300 | PWB-020301 | PWB-020301-001 | 사용자 로그인 이력 확인 | 기간 지정 조회 |
| 7 | PWB-020300 | PWB-020301 | PWB-020301-001 | 사용자 권한 승인 | 브라우저 회원가입 시 권한 승인 루틴 |
| 8 | PWB-020400 | PWB-020401 | PWB-020401-001 | 메뉴 관리 | 메뉴 등록/수정/삭제, "전체 메뉴" 시트 참고 |
| 9 | PWB-020400 | PWB-020401 | PWB-020401-001 | 메뉴 별 권한 설정 | 메뉴별 사용자 접근 권한 설정 |
3. 관리자단 구현 설계 (Auth 방식 적용)
3.1 URL/라우트 구조
관리자 전용 prefix admin 사용, 인증 필터 적용 대상.
admin/ # 관리자 대시보드 (선택)
admin/users # 사용자 관리 목록 (GET)
admin/users/create # 사용자 등록 폼 (GET)
admin/users/store # 사용자 등록 처리 (POST)
admin/users/(:num)/edit # 사용자 수정 폼 (GET)
admin/users/(:num)/update # 사용자 수정 처리 (POST)
admin/users/(:num)/delete # 사용자 삭제(상태변경) (POST)
admin/roles # 사용자 권한 관리 (목록/등록/수정/삭제)
admin/roles/create
admin/roles/store
admin/roles/(:num)/edit
admin/roles/(:num)/update
admin/roles/(:num)/delete
admin/access # 사용자 접근 관리 (하위: 로그인이력, 권한승인)
admin/access/login-history # 로그인 이력 조회 (GET, 기간 조건)
admin/access/approvals # 권한 승인 대기 목록 (GET)
admin/access/approvals/(:num) # 권한 승인/반려 처리 (POST)
admin/menus # 메뉴 관리 (목록/등록/수정/삭제)
admin/menus/create
admin/menus/store
admin/menus/(:num)/edit
admin/menus/(:num)/update
admin/menus/(:num)/delete
admin/menus/permissions # 메뉴별 권한 설정
3.2 컨트롤러 구성 (Auth와 동일 패턴)
| 컨트롤러 | 파일 | 역할 | 주요 메서드 |
|---|---|---|---|
| Admin\Dashboard | Controllers/Admin/Dashboard.php |
관리자 첫 화면 | index() |
| Admin\User | Controllers/Admin/User.php |
사용자 관리 | index(), create(), store(), edit($id), update($id), delete($id) |
| Admin\Role | Controllers/Admin/Role.php |
사용자 권한 관리 | index(), create(), store(), edit($id), update($id), delete($id) |
| Admin\Access | Controllers/Admin/Access.php |
접근 관리 | loginHistory(), approvals(), approve($id), reject($id) |
| Admin\Menu | Controllers/Admin/Menu.php |
메뉴 관리 | index(), create(), store(), edit($id), update($id), delete($id), permissions() |
- 목록/폼: GET →
view('admin/xxx/yyy') - 저장/수정/삭제: POST →
validate→ Model →redirect()->to(...)->with(...) - 에러:
redirect()->back()->withInput()->with('errors', ...)(Auth와 동일)
3.3 모델 구성
| 모델 | 파일 | 테이블 | 비고 |
|---|---|---|---|
| MemberModel | (기존) | member | 사용자 관리에서 재사용 |
| MemberLogModel | (기존) | member_log | 로그인 이력에서 재사용 |
| RoleModel | Models/RoleModel.php |
role (신규) | 권한/역할 마스터 |
| MenuModel | Models/MenuModel.php |
menu (신규) | 메뉴 마스터 |
| MenuPermissionModel | Models/MenuPermissionModel.php |
menu_permission (신규) | 메뉴별 권한 |
member.mb_level은Roles설정과 연동 유지.- 권한 테이블(role)이 있으면
member.mb_level과 매핑 또는 확장.
3.4 뷰 디렉터리 구조
app/Views/
└── admin/
├── layout.php # 관리자 공통 레이아웃 (선택)
├── dashboard/
│ └── index.php
├── user/
│ ├── index.php # 목록
│ ├── create.php # 등록 폼
│ └── edit.php # 수정 폼
├── role/
│ ├── index.php
│ ├── create.php
│ └── edit.php
├── access/
│ ├── login_history.php # 로그인 이력 조회
│ └── approvals.php # 권한 승인 목록/처리
└── menu/
├── index.php
├── create.php
├── edit.php
└── permissions.php # 메뉴별 권한 설정
- 공통:
base_url(),csrf_field(),esc(),old(), 플래시 메시지 (Auth와 동일).
3.5 인증/권한
- 관리자 구분:
mb_level이Roles::LEVEL_SUPER_ADMIN또는LEVEL_LOCAL_ADMIN인 경우만admin/*접근 허용. - 필터:
app/Config/Filters.php에adminAuth등 필터 등록 후,admin/*before에 적용. - 필터 내부:
session()->get('logged_in')및session()->get('mb_level')확인 후 미인증/비관리자면redirect()->to('login')또는 전용 에러 페이지.
4. Routes.php 등록 예시
// 관리자단 (admin prefix, 인증 필터 적용)
$routes->group('admin', ['filter' => 'adminAuth'], static function ($routes) {
$routes->get('/', 'Admin\Dashboard::index');
$routes->get('users', 'Admin\User::index');
$routes->get('users/create', 'Admin\User::create');
$routes->post('users/store', 'Admin\User::store');
$routes->get('users/(:num)/edit', 'Admin\User::edit/$1');
$routes->post('users/(:num)/update', 'Admin\User::update/$1');
$routes->post('users/(:num)/delete', 'Admin\User::delete/$1');
$routes->get('roles', 'Admin\Role::index');
$routes->get('roles/create', 'Admin\Role::create');
$routes->post('roles/store', 'Admin\Role::store');
$routes->get('roles/(:num)/edit', 'Admin\Role::edit/$1');
$routes->post('roles/(:num)/update', 'Admin\Role::update/$1');
$routes->post('roles/(:num)/delete', 'Admin\Role::delete/$1');
$routes->get('access/login-history', 'Admin\Access::loginHistory');
$routes->get('access/approvals', 'Admin\Access::approvals');
$routes->post('access/approvals/(:num)', 'Admin\Access::approve/$1');
$routes->get('menus', 'Admin\Menu::index');
$routes->get('menus/create', 'Admin\Menu::create');
$routes->post('menus/store', 'Admin\Menu::store');
$routes->get('menus/(:num)/edit', 'Admin\Menu::edit/$1');
$routes->post('menus/(:num)/update', 'Admin\Menu::update/$1');
$routes->post('menus/(:num)/delete', 'Admin\Menu::delete/$1');
$routes->get('menus/permissions', 'Admin\Menu::permissions');
$routes->post('menus/permissions', 'Admin\Menu::savePermissions');
});
adminAuth는 별도 필터 클래스에서 로그인 + 관리자 레벨 체크.
5. 구현 순서 제안
- 관리자 필터
Filters.php에adminAuth등록, 필터 클래스에서logged_in+mb_level검사.
- 사용자 관리 (PWB-020201)
Admin\User컨트롤러,admin/user뷰, 기존MemberModel활용.- 삭제는 상태값 변경, 5년 유지 정책은 정책/스케줄로 처리.
- 사용자 권한 관리 (PWB-020101)
Role테이블/모델 정비,Admin\Role컨트롤러·뷰.member.mb_level과 역할 매핑 유지.
- 사용자 접근 관리 (PWB-020301)
- 로그인 이력:
Admin\Access::loginHistory, 기간 조건,MemberLogModel조회. - 권한 승인: 대기 목록용 테이블/플로우 정한 뒤
approvals,approve/reject구현.
- 로그인 이력:
- 메뉴 관리 (PWB-020401)
menu,menu_permission테이블,MenuModel,MenuPermissionModel.Admin\MenuCRUD +permissions/savePermissions.
6. 정리
- 웹 기능목록 CSV의 관리자단(No 4~9)을 Auth와 같은 방식으로 구현한다.
- 컨트롤러: GET은 폼/목록, POST는 처리; 유효성 검사 후 Model 호출, 실패 시
redirect()->back()->withInput()->with('errors', ...). - 뷰:
auth와 동일하게base_url(),csrf_field(),esc(),old(), 플래시 메시지 사용. - 라우트:
admin그룹 + 필터로 인증/권한 통제. - 모델: 기존 Member/MemberLog 활용하고, 권한·메뉴·메뉴권한은 신규 테이블/모델로 추가.
이 설계에 따라 단위 기능별로 Controller → Model → View → Route 순으로 구현하면 Auth와 일관된 관리자단을 만들 수 있다.