feat:DB 트리거 감사 로그 관리 화면 구현
- TriggerAuditLog 모델 (casts, accessors, scopes) - TriggerAuditController (목록/상세/이력/롤백 미리보기/롤백 실행) - index: 대시보드 통계 + 필터 + 목록 + 파티션 현황 - show: old/new diff 뷰 (변경 컬럼 하이라이트) - history: 레코드별 변경 타임라인 - rollback-preview: SQL 미리보기 + 확인 후 실행 - 라우트 5개 등록, 메뉴 시더 (시스템 관리 > DB 변경 추적) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,13 +2,15 @@
|
||||
|
||||
use App\Http\Controllers\Api\BusinessCardOcrController;
|
||||
use App\Http\Controllers\ApiLogController;
|
||||
use App\Http\Controllers\AppVersionController;
|
||||
use App\Http\Controllers\ArchivedRecordController;
|
||||
use App\Http\Controllers\AuditLogController;
|
||||
use App\Http\Controllers\AppVersionController;
|
||||
use App\Http\Controllers\Auth\LoginController;
|
||||
use App\Http\Controllers\BoardController;
|
||||
use App\Http\Controllers\CategoryController;
|
||||
use App\Http\Controllers\CategorySyncController;
|
||||
use App\Http\Controllers\CommonCodeController;
|
||||
use App\Http\Controllers\CommonCodeSyncController;
|
||||
use App\Http\Controllers\CustomerCenterController;
|
||||
use App\Http\Controllers\DailyLogController;
|
||||
use App\Http\Controllers\DepartmentController;
|
||||
@@ -18,13 +20,9 @@
|
||||
use App\Http\Controllers\DocumentTemplateController;
|
||||
use App\Http\Controllers\FcmController;
|
||||
use App\Http\Controllers\ItemFieldController;
|
||||
use App\Http\Controllers\Lab\AIController;
|
||||
use App\Http\Controllers\Lab\ManagementController;
|
||||
use App\Http\Controllers\Lab\StrategyController;
|
||||
use App\Http\Controllers\MenuController;
|
||||
use App\Http\Controllers\MenuSyncController;
|
||||
use App\Http\Controllers\CommonCodeSyncController;
|
||||
use App\Http\Controllers\CategorySyncController;
|
||||
use App\Http\Controllers\PermissionController;
|
||||
use App\Http\Controllers\PostController;
|
||||
use App\Http\Controllers\ProfileController;
|
||||
@@ -33,12 +31,13 @@
|
||||
use App\Http\Controllers\RoleController;
|
||||
use App\Http\Controllers\RolePermissionController;
|
||||
use App\Http\Controllers\Sales\SalesProductController;
|
||||
use App\Http\Controllers\Stats\StatDashboardController;
|
||||
use App\Http\Controllers\System\AiConfigController;
|
||||
use App\Http\Controllers\System\HolidayController;
|
||||
use App\Http\Controllers\Stats\StatDashboardController;
|
||||
use App\Http\Controllers\System\SystemAlertController;
|
||||
use App\Http\Controllers\TenantController;
|
||||
use App\Http\Controllers\TenantSettingController;
|
||||
use App\Http\Controllers\TriggerAuditController;
|
||||
use App\Http\Controllers\UserController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
@@ -92,7 +91,7 @@
|
||||
*/
|
||||
|
||||
// GET /logout 요청 시 로그인 페이지로 리다이렉트
|
||||
Route::get('/logout', fn() => redirect()->route('login'));
|
||||
Route::get('/logout', fn () => redirect()->route('login'));
|
||||
|
||||
Route::middleware(['auth', 'hq.member', 'password.changed'])->group(function () {
|
||||
Route::post('/logout', [LoginController::class, 'logout'])->name('logout');
|
||||
@@ -273,6 +272,15 @@
|
||||
Route::get('/{id}', [AuditLogController::class, 'show'])->name('show');
|
||||
});
|
||||
|
||||
// 트리거 감사 로그 (DB 레벨 변경 추적)
|
||||
Route::prefix('trigger-audit')->name('trigger-audit.')->group(function () {
|
||||
Route::get('/', [TriggerAuditController::class, 'index'])->name('index');
|
||||
Route::get('/{id}', [TriggerAuditController::class, 'show'])->name('show')->whereNumber('id');
|
||||
Route::get('/{id}/rollback-preview', [TriggerAuditController::class, 'rollbackPreview'])->name('rollback-preview')->whereNumber('id');
|
||||
Route::post('/{id}/rollback', [TriggerAuditController::class, 'rollbackExecute'])->name('rollback-execute')->whereNumber('id');
|
||||
Route::get('/{tableName}/{rowId}/history', [TriggerAuditController::class, 'recordHistory'])->name('history');
|
||||
});
|
||||
|
||||
// 프로젝트 관리 (Blade 화면만)
|
||||
Route::prefix('project-management')->name('pm.')->group(function () {
|
||||
// 대시보드
|
||||
@@ -456,6 +464,7 @@
|
||||
if (request()->header('HX-Request')) {
|
||||
return response('', 200)->header('HX-Redirect', route('finance.account-transactions'));
|
||||
}
|
||||
|
||||
return redirect()->route('finance.account-transactions');
|
||||
})->name('index');
|
||||
Route::get('/accounts', [\App\Http\Controllers\Barobill\EaccountController::class, 'accounts'])->name('accounts');
|
||||
@@ -486,6 +495,7 @@
|
||||
if (request()->header('HX-Request')) {
|
||||
return response('', 200)->header('HX-Redirect', route('finance.card-transactions'));
|
||||
}
|
||||
|
||||
return redirect()->route('finance.card-transactions');
|
||||
})->name('index');
|
||||
Route::get('/cards', [\App\Http\Controllers\Barobill\EcardController::class, 'cards'])->name('cards');
|
||||
@@ -782,6 +792,7 @@
|
||||
if (request()->header('HX-Request')) {
|
||||
return response('', 200)->header('HX-Redirect', route('finance.journal-entries'));
|
||||
}
|
||||
|
||||
return view('finance.journal-entries');
|
||||
})->name('journal-entries');
|
||||
|
||||
@@ -909,7 +920,7 @@
|
||||
});
|
||||
|
||||
// 기존 sales-commission URL 리다이렉트 (호환성)
|
||||
Route::get('/sales-commission', fn() => redirect()->route('finance.sales-commissions.index'))->name('sales-commission');
|
||||
Route::get('/sales-commission', fn () => redirect()->route('finance.sales-commissions.index'))->name('sales-commission');
|
||||
Route::get('/consulting-fee', function () {
|
||||
if (request()->header('HX-Request')) {
|
||||
return response('', 200)->header('HX-Redirect', route('finance.consulting-fee'));
|
||||
|
||||
Reference in New Issue
Block a user