feat: 기본코드 bag 목록과 관리자 CRUD 분리
- /bag/code-kinds, /bag/code-details/{ck_idx} 조회 (LoginAuthFilter, Roles::canManageCodeMaster)
- admin에서는 종류·세부 목록 제거, 등록·수정·삭제만 유지 후 bag으로 리다이렉트
- 사이트 메뉴·기본코드 링크 SQL, CSV 동기화 스크립트·README 보강
- 관리자 대시보드: 발주·판매 테이블 미존재 시 통계 비활성화
- 회원 로그인 잠금(mb_login_fail_count, mb_locked_until) 및 관리자 잠금 해제
Made-with: Cursor
This commit is contained in:
@@ -26,6 +26,7 @@ class Filters extends BaseFilters
|
||||
*/
|
||||
public array $aliases = [
|
||||
'adminAuth' => \App\Filters\AdminAuthFilter::class,
|
||||
'loginAuth' => \App\Filters\LoginAuthFilter::class,
|
||||
'csrf' => CSRF::class,
|
||||
'toolbar' => DebugToolbar::class,
|
||||
'honeypot' => Honeypot::class,
|
||||
|
||||
@@ -42,6 +42,14 @@ class Roles extends BaseConfig
|
||||
return $level === self::LEVEL_SUPER_ADMIN || $level === self::LEVEL_HEADQUARTERS_ADMIN;
|
||||
}
|
||||
|
||||
/**
|
||||
* 기본코드(종류·세부) 등록·수정·삭제 가능 (지자체·super·본부 관리자)
|
||||
*/
|
||||
public static function canManageCodeMaster(int $level): bool
|
||||
{
|
||||
return $level === self::LEVEL_LOCAL_ADMIN || self::isSuperAdminEquivalent($level);
|
||||
}
|
||||
|
||||
/**
|
||||
* TOTP 2차 인증 적용 대상 (지자체·super·본부 관리자)
|
||||
*/
|
||||
|
||||
@@ -17,6 +17,11 @@ $routes->get('bag/waste-suibal-enterprise', 'Home::wasteSuibalEnterprise');
|
||||
|
||||
// 사이트 메뉴 (/bag/*)
|
||||
$routes->get('bag/basic-info', 'Bag::basicInfo');
|
||||
$routes->get('bag/code-kinds', 'Bag::codeKinds');
|
||||
$routes->get('bag/code-details/(:num)', 'Bag::codeDetails/$1');
|
||||
|
||||
// 옛 주소 호환: 세부 목록만 사이트로 이동
|
||||
$routes->get('admin/code-details/(:num)', 'Admin\CodeDetail::index/$1');
|
||||
$routes->get('bag/purchase-inbound', 'Bag::purchaseInbound');
|
||||
$routes->get('bag/issue', 'Bag::issue');
|
||||
$routes->get('bag/inventory', 'Bag::inventory');
|
||||
@@ -63,6 +68,7 @@ $routes->group('admin', ['filter' => 'adminAuth'], static function ($routes): vo
|
||||
$routes->post('users/store', 'Admin\User::store');
|
||||
$routes->get('users/edit/(:num)', 'Admin\User::edit/$1');
|
||||
$routes->post('users/update/(:num)', 'Admin\User::update/$1');
|
||||
$routes->post('users/unlock-login/(:num)', 'Admin\User::unlockLogin/$1');
|
||||
$routes->post('users/delete/(:num)', 'Admin\User::delete/$1');
|
||||
$routes->get('access/login-history', 'Admin\Access::loginHistory');
|
||||
$routes->get('access/approvals', 'Admin\Access::approvals');
|
||||
@@ -88,8 +94,7 @@ $routes->group('admin', ['filter' => 'adminAuth'], static function ($routes): vo
|
||||
$routes->get('password-change', 'Admin\PasswordChange::index');
|
||||
$routes->post('password-change', 'Admin\PasswordChange::update');
|
||||
|
||||
// 기본코드 종류 관리 (P2-01)
|
||||
$routes->get('code-kinds', 'Admin\CodeKind::index');
|
||||
// 기본코드 종류 관리 (P2-01) — 등록·수정·삭제는 관리자 전용
|
||||
$routes->get('code-kinds/create', 'Admin\CodeKind::create');
|
||||
$routes->post('code-kinds/store', 'Admin\CodeKind::store');
|
||||
$routes->get('code-kinds/edit/(:num)', 'Admin\CodeKind::edit/$1');
|
||||
@@ -97,7 +102,6 @@ $routes->group('admin', ['filter' => 'adminAuth'], static function ($routes): vo
|
||||
$routes->post('code-kinds/delete/(:num)', 'Admin\CodeKind::delete/$1');
|
||||
|
||||
// 세부코드 관리 (P2-02)
|
||||
$routes->get('code-details/(:num)', 'Admin\CodeDetail::index/$1');
|
||||
$routes->get('code-details/(:num)/create', 'Admin\CodeDetail::create/$1');
|
||||
$routes->post('code-details/store', 'Admin\CodeDetail::store');
|
||||
$routes->get('code-details/edit/(:num)', 'Admin\CodeDetail::edit/$1');
|
||||
|
||||
Reference in New Issue
Block a user