giftcon_dev/routes/admin.php
2026-02-05 21:03:38 +09:00

112 lines
4.9 KiB
PHP

<?php
use App\Http\Controllers\Admin\Auth\AdminAuthController;
use App\Http\Controllers\Admin\AdminAdminsController;
use App\Http\Controllers\Admin\MeController;
use Illuminate\Support\Facades\Route;
Route::middleware(['web'])->group(function () {
// 로그인/OTP/비번초기화는 guest:admin 만 접근
Route::middleware('guest:admin')->group(function () {
Route::get('/login', [AdminAuthController::class, 'showLogin'])
->name('admin.login.form');
Route::post('/login', [AdminAuthController::class, 'storeLogin'])
->middleware('throttle:admin-login')
->name('admin.login.store');
Route::get('/password/reset', [AdminAuthController::class, 'showForceReset'])
->name('admin.password.reset.form');
Route::post('/password/reset', [AdminAuthController::class, 'storeForceReset'])
->middleware('throttle:admin-login')
->name('admin.password.reset.store');
// OTP(sms) 2차 인증
Route::get('/otp', [AdminAuthController::class, 'showOtp'])
->name('admin.otp.form');
Route::post('/otp', [AdminAuthController::class, 'verifyOtp'])
->middleware('throttle:admin-otp')
->name('admin.otp.store');
// TOTP(구글 OTP) 2차 인증
Route::get('/totp', [AdminAuthController::class, 'showTotp'])
->name('admin.totp.form');
Route::post('/totp', [AdminAuthController::class, 'verifyTotp'])
->middleware('throttle:admin-otp') // 필요하면 throttle:admin-totp 로 분리 가능
->name('admin.totp.store');
});
// 로그인 이후
Route::middleware(['auth:admin', \App\Http\Middleware\NoStore::class])->group(function () {
// ✅ 대시보드: 전체 허용
Route::get('/', fn() => view('admin.home'))->name('admin.home');
// ✅ 내 정보: 전체 허용
Route::get('/me', [MeController::class, 'show'])->name('admin.me');
Route::post('/me', [MeController::class, 'update'])->name('admin.me.update');
Route::get('/me/password', [MeController::class, 'showPassword'])->name('admin.me.password.form');
Route::post('/me/password', [MeController::class, 'updatePassword'])->name('admin.me.password.update');
// ✅ 보안/OTP 등록(자기계정 설정): 전체 허용
Route::get('/security', [AdminAuthController::class, 'security'])->name('admin.security');
Route::post('/totp/start', [AdminAuthController::class, 'totpStart'])->name('admin.totp.start');
Route::post('/totp/confirm', [AdminAuthController::class, 'totpConfirm'])->name('admin.totp.confirm');
Route::post('/totp/disable', [AdminAuthController::class, 'totpDisable'])->name('admin.totp.disable');
Route::post('/totp/reset', [AdminAuthController::class, 'totpReset'])->name('admin.totp.reset'); // 재등록(새 시크릿)
Route::post('/totp/mode', [AdminAuthController::class, 'totpMode'])->name('admin.totp.mode');
Route::post('/logout', [AdminAuthController::class, 'logout'])->name('admin.logout');
// ✅ 관리자 계정 관리: super_admin 전용
Route::prefix('/admins')
->name('admin.admins.')
->middleware('admin.role:super_admin')
->group(function () {
Route::get('/', [AdminAdminsController::class, 'index'])->name('index');
Route::get('/create', [AdminAdminsController::class, 'create'])->name('create');
Route::post('/', [AdminAdminsController::class, 'store'])->name('store');
Route::get('/{id}', [AdminAdminsController::class, 'edit'])->name('edit');
Route::post('/{id}', [AdminAdminsController::class, 'update'])->name('update');
Route::post('/{id}/reset-password', [AdminAdminsController::class, 'resetPassword'])->name('reset_password');
Route::post('/{id}/unlock', [AdminAdminsController::class, 'unlock'])->name('unlock');
});
/**
* 아래는 메뉴는 있지만 실제 라우트/컨트롤러가 아직 없으니,
* 구현 시점에만 같은 패턴으로 그룹에 admin.role 을 붙이면 됨.
*
* 예)
* - support 전용:
* Route::prefix('/inquiry')->name('admin.inquiry.')
* ->middleware('admin.role:support')
* ->group(...)
*
* - finance 전용:
* Route::prefix('/settlement')->name('admin.settlement.')
* ->middleware('admin.role:finance')
* ->group(...)
*
* - product 전용:
* Route::prefix('/products')->name('admin.products.')
* ->middleware('admin.role:product')
* ->group(...)
*/
});
});
/* 개발용 페이지 세션 보기 */
if (config('app.debug') || app()->environment('local')) {
require __DIR__.'/dev_admin.php';
}
/* 개발용 페이지 세션 보기 */