fix:공통코드 슈퍼관리자 권한 우회 추가
슈퍼관리자는 다른 테넌트/글로벌 코드 수정·토글·삭제 가능 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user