diff --git a/app/Http/Controllers/CommonCodeController.php b/app/Http/Controllers/CommonCodeController.php index 236f6e04..47d6d33e 100644 --- a/app/Http/Controllers/CommonCodeController.php +++ b/app/Http/Controllers/CommonCodeController.php @@ -178,19 +178,25 @@ public function update(Request $request, int $id): RedirectResponse|JsonResponse return redirect()->back()->with('error', '코드를 찾을 수 없습니다.'); } - // 권한 체크: 글로벌 코드는 HQ만, 테넌트 코드는 해당 테넌트만 - if ($code->tenant_id === null && ! $isHQ) { - if ($request->ajax()) { - return response()->json(['error' => '글로벌 코드는 본사만 수정할 수 있습니다.'], 403); - } - return redirect()->back()->with('error', '글로벌 코드는 본사만 수정할 수 있습니다.'); - } + // 권한 체크: 슈퍼관리자는 모든 코드 수정 가능 + $isSuperAdmin = auth()->user()?->isSuperAdmin() ?? false; - if ($code->tenant_id !== null && $code->tenant_id !== $tenantId) { - if ($request->ajax()) { - return response()->json(['error' => '다른 테넌트의 코드는 수정할 수 없습니다.'], 403); + if (! $isSuperAdmin) { + // 글로벌 코드는 HQ만 + if ($code->tenant_id === null && ! $isHQ) { + if ($request->ajax()) { + return response()->json(['error' => '글로벌 코드는 본사만 수정할 수 있습니다.'], 403); + } + return redirect()->back()->with('error', '글로벌 코드는 본사만 수정할 수 있습니다.'); + } + + // 테넌트 코드는 해당 테넌트만 + if ($code->tenant_id !== null && $code->tenant_id !== $tenantId) { + if ($request->ajax()) { + return response()->json(['error' => '다른 테넌트의 코드는 수정할 수 없습니다.'], 403); + } + return redirect()->back()->with('error', '다른 테넌트의 코드는 수정할 수 없습니다.'); } - return redirect()->back()->with('error', '다른 테넌트의 코드는 수정할 수 없습니다.'); } $validated = $request->validate([ @@ -244,13 +250,17 @@ public function toggle(Request $request, int $id): JsonResponse return response()->json(['error' => '코드를 찾을 수 없습니다.'], 404); } - // 권한 체크 - if ($code->tenant_id === null && ! $isHQ) { - return response()->json(['error' => '글로벌 코드는 본사만 수정할 수 있습니다.'], 403); - } + // 권한 체크: 슈퍼관리자는 모든 코드 수정 가능 + $isSuperAdmin = auth()->user()?->isSuperAdmin() ?? false; - if ($code->tenant_id !== null && $code->tenant_id !== $tenantId) { - return response()->json(['error' => '다른 테넌트의 코드는 수정할 수 없습니다.'], 403); + if (! $isSuperAdmin) { + if ($code->tenant_id === null && ! $isHQ) { + return response()->json(['error' => '글로벌 코드는 본사만 수정할 수 있습니다.'], 403); + } + + if ($code->tenant_id !== null && $code->tenant_id !== $tenantId) { + return response()->json(['error' => '다른 테넌트의 코드는 수정할 수 없습니다.'], 403); + } } $code->is_active = ! $code->is_active; @@ -438,20 +448,25 @@ public function destroy(Request $request, int $id): RedirectResponse|JsonRespons return redirect()->back()->with('error', '코드를 찾을 수 없습니다.'); } - // 글로벌 코드 삭제는 HQ만 - if ($code->tenant_id === null && ! $isHQ) { - if ($request->ajax()) { - return response()->json(['error' => '글로벌 코드는 본사만 삭제할 수 있습니다.'], 403); - } - return redirect()->back()->with('error', '글로벌 코드는 본사만 삭제할 수 있습니다.'); - } + // 권한 체크: 슈퍼관리자는 모든 코드 삭제 가능 + $isSuperAdmin = auth()->user()?->isSuperAdmin() ?? false; - // 다른 테넌트 코드 삭제 불가 - if ($code->tenant_id !== null && $code->tenant_id !== $tenantId) { - if ($request->ajax()) { - return response()->json(['error' => '다른 테넌트의 코드는 삭제할 수 없습니다.'], 403); + if (! $isSuperAdmin) { + // 글로벌 코드 삭제는 HQ만 + if ($code->tenant_id === null && ! $isHQ) { + if ($request->ajax()) { + return response()->json(['error' => '글로벌 코드는 본사만 삭제할 수 있습니다.'], 403); + } + return redirect()->back()->with('error', '글로벌 코드는 본사만 삭제할 수 있습니다.'); + } + + // 다른 테넌트 코드 삭제 불가 + if ($code->tenant_id !== null && $code->tenant_id !== $tenantId) { + if ($request->ajax()) { + return response()->json(['error' => '다른 테넌트의 코드는 삭제할 수 없습니다.'], 403); + } + return redirect()->back()->with('error', '다른 테넌트의 코드는 삭제할 수 없습니다.'); } - return redirect()->back()->with('error', '다른 테넌트의 코드는 삭제할 수 없습니다.'); } $codeGroup = $code->code_group;