docs: add project docs and test updates

This commit is contained in:
taekyoungc
2026-04-08 00:23:55 +09:00
parent 06fedc866a
commit 06aa401048
238 changed files with 8373 additions and 148 deletions

View File

@@ -0,0 +1,16 @@
# 관리자단 — 필터
## AdminAuthFilter
- **파일**: `app/Filters/AdminAuthFilter.php`
- **등록**: `app/Config/Filters.php``'adminAuth' => \App\Filters\AdminAuthFilter::class`
### 동작
1. **로그인 여부**: `session()->get('logged_in')`이 없으면 → `site_url('login')`으로 리다이렉트, 플래시 `error` "로그인이 필요합니다."
2. **권한**: `session()->get('mb_level')`**3**(`Roles::LEVEL_LOCAL_ADMIN`) 또는 **4**(`Roles::LEVEL_SUPER_ADMIN`)이 아니면 → `site_url('/')`로 리다이렉트, 플래시 `error` "관리자만 접근할 수 있습니다."
3. 통과 시 `before()``null` 반환하여 다음 처리 진행.
### 적용 범위
- `app/Config/Routes.php``admin` 그룹 전체에 `'filter' => 'adminAuth'`로 적용됨.

View File

@@ -0,0 +1,25 @@
# 관리자단 — 라우트
## 정의 위치
`app/Config/Routes.php``$routes->group('admin', ['filter' => 'adminAuth'], ...)`
## 목록
| Method | URI | Handler | 비고 |
|--------|-----|---------|------|
| GET | `/admin` | `Admin\Dashboard::index` | 대시보드 |
| GET | `/admin/users` | `Admin\User::index` | 회원 목록 |
| GET | `/admin/users/create` | `Admin\User::create` | 회원 등록 폼 |
| POST | `/admin/users/store` | `Admin\User::store` | 회원 등록 처리 |
| GET | `/admin/users/edit/(:num)` | `Admin\User::edit/$1` | 회원 수정 폼 |
| POST | `/admin/users/update/(:num)` | `Admin\User::update/$1` | 회원 수정 처리 |
| POST | `/admin/users/delete/(:num)` | `Admin\User::delete/$1` | 회원 탈퇴 처리 |
| GET | `/admin/access/login-history` | `Admin\Access::loginHistory` | 로그인 이력(기간 조회) |
| GET | `/admin/access/approvals` | `Admin\Access::approvals` | 권한 승인 대기 목록 |
| POST | `/admin/access/approve/(:num)` | `Admin\Access::approve/$1` | 권한 승인(플레이스홀더) |
| POST | `/admin/access/reject/(:num)` | `Admin\Access::reject/$1` | 권한 반려(플레이스홀더) |
| GET | `/admin/roles` | `Admin\Role::index` | 역할 목록(Config\Roles) |
| GET | `/admin/menus` | `Admin\Menu::index` | 메뉴 관리(플레이스홀더) |
모든 위 라우트에 `adminAuth` 필터가 before/after로 적용됨.

View File

@@ -0,0 +1,59 @@
# 관리자단 — 컨트롤러
## 공통
- 네임스페이스: `App\Controllers\Admin`
- 모든 응답은 `admin/layout`으로 감싸서 `title`, `content` 전달. 본문은 하위 뷰에서 렌더.
---
## Dashboard
- **파일**: `app/Controllers/Admin/Dashboard.php`
- **메서드**: `index()` — 대시보드 뷰만 표시.
---
## User (회원 관리)
- **파일**: `app/Controllers/Admin/User.php`
- **의존**: `MemberModel`, `Config\Roles`
| 메서드 | 역할 |
|--------|------|
| `index()` | 회원 목록 (목록 뷰 + roles) |
| `create()` | 회원 등록 폼 |
| `store()` | 등록 처리: 유효성 검사 → 비밀번호 해시 → insert, redirect `admin/users` |
| `edit($id)` | 수정 폼 (회원 없으면 redirect) |
| `update($id)` | 수정 처리: 유효성(비밀번호 선택), mb_state 포함, redirect `admin/users` |
| `delete($id)` | 탈퇴 처리: `mb_state=0`, `mb_leavedate` 설정 후 redirect (물리 삭제 없음) |
- 삭제는 **탈퇴 처리**만 수행. 5년 유지 정책은 별도 스케줄/정책으로 구현 예정.
---
## Access (접근 관리)
- **파일**: `app/Controllers/Admin/Access.php`
- **의존**: `MemberLogModel`
| 메서드 | 역할 |
|--------|------|
| `loginHistory()` | GET `start`/`end` 기간으로 로그 이력 조회, 뷰에 list/start/end 전달 |
| `approvals()` | 권한 승인 대기 목록 (현재 빈 목록, 추후 테이블 연동) |
| `approve($id)` | 승인 처리 플레이스홀더 (redirect + success) |
| `reject($id)` | 반려 처리 플레이스홀더 (redirect + success) |
---
## Role (역할)
- **파일**: `app/Controllers/Admin/Role.php`
- **메서드**: `index()``Config\Roles``levelNames` 목록만 뷰에 전달. (role 테이블 미사용, 추후 확장 가능)
---
## Menu (메뉴)
- **파일**: `app/Controllers/Admin/Menu.php`
- **메서드**: `index()` — 메뉴 관리 안내 뷰만 표시. (menu·menu_permission 테이블 연동은 추후)

View File

@@ -0,0 +1,29 @@
# 관리자단 — 뷰
## 공통 레이아웃
- **파일**: `app/Views/admin/layout.php`
- **역할**: 공통 HTML·Tailwind, 좌측 사이드바(대시보드/회원/로그인이력/승인대기/역할/메뉴 링크), 플래시(success/error/errors) 표시, `<?= $content ?>`로 본문 출력.
- **변수**: `$title`, `$content` (본문은 각 컨트롤러에서 `view('admin/...')`로 렌더 후 전달)
---
## 디렉터리·파일
| 경로 | 역할 |
|------|------|
| `admin/dashboard/index.php` | 대시보드 본문 |
| `admin/user/index.php` | 회원 목록 테이블(수정/삭제 링크) |
| `admin/user/create.php` | 회원 등록 폼 (mb_id, mb_passwd, mb_name, mb_email, mb_phone, mb_level) |
| `admin/user/edit.php` | 회원 수정 폼 (비밀번호 변경 선택, mb_state 포함) |
| `admin/access/login_history.php` | 기간(start/end) 조회 폼 + 로그인 이력 테이블 |
| `admin/access/approvals.php` | 권한 승인 대기 안내·테이블(현재 빈 목록) |
| `admin/role/index.php` | Config\Roles levelNames 테이블 |
| `admin/menu/index.php` | 메뉴 관리 안내 문구 |
---
## 뷰 규칙 (개발 규칙 준수)
- 출력: `esc()`, 링크: `base_url()`, 폼: `csrf_field()`, 복원: `old()`
- 플래시: layout에서 `success`, `error`, `errors` 표시

View File

@@ -0,0 +1,19 @@
# 관리자단 — 사용 방법 및 확장 예정
## 사용 방법
1. **관리자 계정**: DB `member` 테이블에서 해당 회원의 `mb_level`**3**(지자체관리자) 또는 **4**(super admin)으로 설정.
2. **접속**: 해당 계정으로 로그인 후 `/admin` 접속.
3. **회원 관리**: 등록/수정/삭제(탈퇴 처리). 삭제는 물리 삭제 없이 `mb_state=0`, `mb_leavedate` 기록.
4. **로그인 이력**: `/admin/access/login-history`에서 쿼리 파라미터 `start`, `end`(날짜)로 기간 조회.
---
## 확장 예정
| 항목 | 현재 | 추후 |
|------|------|------|
| **권한 승인** | 승인 대기·승인/반려 플레이스홀더 | 권한 승인 요청 테이블·플로우 연동 후 구현 |
| **역할(Role)** | Config\Roles levelNames 목록만 표시 | role 테이블·CRUD 및 역할별 설명 등 |
| **메뉴(Menu)** | 안내 문구만 표시 | menu, menu_permission 테이블 및 메뉴별 권한 설정 (설계서 5단계) |
| **회원 삭제 정책** | 탈퇴 처리만 수행 | 5년 보관 후 물리 삭제 등 스케줄/정책 추가 가능 |

View File

@@ -0,0 +1,38 @@
# 관리자단 구현 완료 내역
> 개발 규칙 및 `docs/ai용 개발계획/관리자단_개발_설계.md` 기준으로 구현된 관리자단(admin) 기능 요약.
---
## 접속 URL
| 구분 | URL |
|------|-----|
| 관리자 대시보드 | `/admin` |
| 회원 관리 | `/admin/users` |
| 회원 등록 | `/admin/users/create` |
| 로그인 이력 | `/admin/access/login-history` |
| 승인 대기 | `/admin/access/approvals` |
| 역할 | `/admin/roles` |
| 메뉴 | `/admin/menus` |
- 접속 조건: 로그인한 계정의 `mb_level`**3**(지자체관리자) 또는 **4**(super admin)이어야 함.
---
## 구현 목록
| 항목 | 경로 | 비고 |
|------|------|------|
| 필터 | `app/Filters/AdminAuthFilter.php` | 미로그인/비관리자 차단 |
| 라우트 | `app/Config/Routes.php` | `admin` 그룹, `adminAuth` 적용 |
| 컨트롤러 | `app/Controllers/Admin/*.php` | Dashboard, User, Access, Role, Menu |
| 뷰 | `app/Views/admin/**/*.php` | layout, dashboard, user, access, role, menu |
상세는 아래 파일 참고.
- [01-필터.md](01-필터.md) — AdminAuth 필터
- [02-라우트.md](02-라우트.md) — admin 라우트 목록
- [03-컨트롤러.md](03-컨트롤러.md) — 컨트롤러·메서드 요약
- [04-뷰.md](04-뷰.md) — 뷰 구조·역할
- [05-사용방법_확장예정.md](05-사용방법_확장예정.md) — 사용 방법 및 추후 확장