Files
jongryangje/docs/ai용 개발계획/관리자단_개발_설계.md
2026-04-08 00:23:55 +09:00

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_levelRoles 설정과 연동 유지.
  • 권한 테이블(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_levelRoles::LEVEL_SUPER_ADMIN 또는 LEVEL_LOCAL_ADMIN인 경우만 admin/* 접근 허용.
  • 필터: app/Config/Filters.phpadminAuth 등 필터 등록 후, 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. 구현 순서 제안

  1. 관리자 필터
    • Filters.phpadminAuth 등록, 필터 클래스에서 logged_in + mb_level 검사.
  2. 사용자 관리 (PWB-020201)
    • Admin\User 컨트롤러, admin/user 뷰, 기존 MemberModel 활용.
    • 삭제는 상태값 변경, 5년 유지 정책은 정책/스케줄로 처리.
  3. 사용자 권한 관리 (PWB-020101)
    • Role 테이블/모델 정비, Admin\Role 컨트롤러·뷰.
    • member.mb_level과 역할 매핑 유지.
  4. 사용자 접근 관리 (PWB-020301)
    • 로그인 이력: Admin\Access::loginHistory, 기간 조건, MemberLogModel 조회.
    • 권한 승인: 대기 목록용 테이블/플로우 정한 뒤 approvals, approve/reject 구현.
  5. 메뉴 관리 (PWB-020401)
    • menu, menu_permission 테이블, MenuModel, MenuPermissionModel.
    • Admin\Menu CRUD + 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와 일관된 관리자단을 만들 수 있다.