메뉴 영구 삭제 시 연관 권한 삭제 및 아카이브 저장

- forceDeleteMenu: 연관 권한(menu:{id}.*) 함께 삭제
- forceDeleteGlobalMenu: 연관 권한 삭제 + 테넌트 메뉴 참조 해제
- 삭제 전 권한/역할 연결 정보를 archived_records에 저장
- Controller 반환값에 삭제된 권한 정보 포함
This commit is contained in:
2025-12-09 22:51:20 +09:00
parent c9dd0bef62
commit f92b9335fc
3 changed files with 205 additions and 16 deletions

View File

@@ -197,6 +197,8 @@ public function restore(Request $request, int $id): JsonResponse
/**
* 메뉴 영구 삭제 (슈퍼관리자 전용)
* - 연관 권한도 함께 삭제
* - 삭제 정보는 archived_records에 저장
*/
public function forceDestroy(Request $request, int $id): JsonResponse
{
@@ -211,25 +213,29 @@ public function forceDestroy(Request $request, int $id): JsonResponse
try {
$result = $this->menuService->forceDeleteMenu($id);
if (! $result) {
if (! $result['success']) {
return response()->json([
'success' => false,
'message' => '메뉴를 찾을 수 없거나 자식 메뉴가 있어 영구 삭제할 수 없습니다.',
], 404);
'message' => $result['message'],
], 400);
}
// HTMX 요청 시 테이블 새로고침 트리거
if ($request->header('HX-Request')) {
return response()->json([
'success' => true,
'message' => '메뉴가 영구 삭제되었습니다.',
'message' => $result['message'],
'action' => 'refresh',
'deleted_permissions' => $result['deleted_permissions'],
'batch_id' => $result['batch_id'] ?? null,
]);
}
return response()->json([
'success' => true,
'message' => '메뉴가 영구 삭제되었습니다.',
'message' => $result['message'],
'deleted_permissions' => $result['deleted_permissions'],
'batch_id' => $result['batch_id'] ?? null,
]);
} catch (\Exception $e) {
return response()->json([