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

- 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

@@ -165,30 +165,39 @@ public function restore(Request $request, int $id): JsonResponse
/**
* 글로벌 메뉴 영구 삭제
* - 연관 권한도 함께 삭제
* - 참조하는 테넌트 메뉴의 global_menu_id 해제
* - 삭제 정보는 archived_records에 저장
*/
public function forceDestroy(Request $request, int $id): JsonResponse
{
try {
$result = $this->menuService->forceDeleteGlobalMenu($id);
if (! $result) {
if (! $result['success']) {
return response()->json([
'success' => false,
'message' => '글로벌 메뉴를 찾을 수 없거나 자식 메뉴가 있어 영구 삭제할 수 없습니다.',
], 404);
'message' => $result['message'],
], 400);
}
if ($request->header('HX-Request')) {
return response()->json([
'success' => true,
'message' => '글로벌 메뉴가 영구 삭제되었습니다.',
'message' => $result['message'],
'action' => 'refresh',
'deleted_permissions' => $result['deleted_permissions'],
'referencing_menus_unlinked' => $result['referencing_menus_unlinked'] ?? 0,
'batch_id' => $result['batch_id'] ?? null,
]);
}
return response()->json([
'success' => true,
'message' => '글로벌 메뉴가 영구 삭제되었습니다.',
'message' => $result['message'],
'deleted_permissions' => $result['deleted_permissions'],
'referencing_menus_unlinked' => $result['referencing_menus_unlinked'] ?? 0,
'batch_id' => $result['batch_id'] ?? null,
]);
} catch (\Exception $e) {
return response()->json([