144 lines
6.3 KiB
PHP
144 lines
6.3 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\Admin\AdminAdminsController;
|
|
use App\Http\Controllers\Admin\MeController;
|
|
use App\Http\Controllers\Admin\Auth\AdminAuthController;
|
|
use App\Http\Controllers\Admin\Sms\AdminSmsController;
|
|
use App\Http\Controllers\Admin\Sms\AdminSmsLogController;
|
|
use App\Http\Controllers\Admin\Sms\AdminSmsTemplateController;
|
|
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');
|
|
});
|
|
|
|
Route::prefix('/sms')->group(function () {
|
|
// 발송
|
|
Route::get('/send', [AdminSmsController::class, 'create'])->name('admin.sms.send');
|
|
Route::post('/send', [AdminSmsController::class, 'store'])->name('admin.sms.send.store');
|
|
|
|
// 이력
|
|
Route::get('/logs', [AdminSmsLogController::class, 'index'])->name('admin.sms.logs');
|
|
Route::get('/logs/{batchId}', [AdminSmsLogController::class, 'show'])->name('admin.sms.logs.show');
|
|
});
|
|
|
|
Route::prefix('templates')->name('admin.templates.')->group(function () {
|
|
Route::get('/', [AdminSmsTemplateController::class, 'index'])
|
|
->name('index');
|
|
|
|
Route::get('/create', [AdminSmsTemplateController::class, 'create'])
|
|
->name('create');
|
|
|
|
Route::post('/', [AdminSmsTemplateController::class, 'store'])
|
|
->name('store');
|
|
|
|
Route::get('/{id}', [AdminSmsTemplateController::class, 'edit'])
|
|
->whereNumber('id')
|
|
->name('edit');
|
|
|
|
Route::put('/{id}', [AdminSmsTemplateController::class, 'update'])
|
|
->whereNumber('id')
|
|
->name('update');
|
|
});
|
|
|
|
/**
|
|
* 아래는 메뉴는 있지만 실제 라우트/컨트롤러가 아직 없으니,
|
|
* 구현 시점에만 같은 패턴으로 그룹에 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';
|
|
}
|
|
/* 개발용 페이지 세션 보기 */
|