fix: 워크스페이스 탭 중첩 셸 방지 + 세션 만료 시 로그인 리다이렉트
- EmbedRedirectFilter 추가: 임베드(embed=1) 요청의 리다이렉트 Location에 embed 유지(중첩 셸 방지) - bag/* 전체에 loginAuth 적용, 임베드 대시보드 로그아웃 시 로그인으로 이동 - 기본코드 종류 선택 시 embed 유지, 일괄입고 오류 복귀를 명시 URL로(back() 제거) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -592,6 +592,7 @@ class Bag extends BaseController
|
||||
'selectedKind' => $selectedKind,
|
||||
'detailList' => $detailList,
|
||||
'rowCanEdit' => $rowCanEdit,
|
||||
'isEmbed' => $this->isEmbeddedRequest(), // 행 클릭 시 embed 유지(중첩 셸 방지)
|
||||
], true); // 본문이 이미 카드 2개라 바깥 래퍼 생략
|
||||
}
|
||||
|
||||
@@ -4768,14 +4769,18 @@ SQL);
|
||||
$receiverIdx = $this->parseReceiverRefToStoredIdx($lgIdx, $receiverRef);
|
||||
$senderIdx = (int) ($this->request->getPost('br_sender_idx') ?? 0);
|
||||
|
||||
// 오류 시 명시적으로 일괄 입고 화면으로 복귀(back()은 도움말 드로어 등이 남긴
|
||||
// previous_url 로 잘못 이동할 수 있어 사용하지 않는다)
|
||||
$batchUrl = site_url('bag/receiving/batch?company_idx=' . $companyIdx . '&bag_code=' . rawurlencode($bagCode));
|
||||
|
||||
if (empty($selected)) {
|
||||
return redirect()->back()->withInput()->with('error', '일괄 입고할 행을 선택해 주세요.');
|
||||
return redirect()->to($batchUrl)->withInput()->with('error', '일괄 입고할 행을 선택해 주세요.');
|
||||
}
|
||||
if (! preg_match('/^\d{4}-\d{2}-\d{2}$/', $receiveDate)) {
|
||||
return redirect()->back()->withInput()->with('error', '입고일 형식을 확인해 주세요.');
|
||||
return redirect()->to($batchUrl)->withInput()->with('error', '입고일 형식을 확인해 주세요.');
|
||||
}
|
||||
if ($receiverIdx <= 0) {
|
||||
return redirect()->back()->withInput()->with('error', '인수자를 선택해 주세요.');
|
||||
return redirect()->to($batchUrl)->withInput()->with('error', '인수자를 선택해 주세요.');
|
||||
}
|
||||
|
||||
$senderResolved = $this->resolveCompanySenderName($lgIdx, $senderIdx);
|
||||
@@ -4816,7 +4821,7 @@ SQL);
|
||||
}
|
||||
|
||||
if (empty($insertRows)) {
|
||||
return redirect()->back()->withInput()->with('error', '선택한 행에 입고할 수량이 없습니다.');
|
||||
return redirect()->to($batchUrl)->withInput()->with('error', '선택한 행에 입고할 수량이 없습니다.');
|
||||
}
|
||||
|
||||
$recvModel = model(BagReceivingModel::class);
|
||||
@@ -4846,7 +4851,7 @@ SQL);
|
||||
$db->transComplete();
|
||||
|
||||
if (! $db->transStatus()) {
|
||||
return redirect()->back()->withInput()->with('error', '일괄 입고 처리 중 오류가 발생했습니다.');
|
||||
return redirect()->to($batchUrl)->withInput()->with('error', '일괄 입고 처리 중 오류가 발생했습니다.');
|
||||
}
|
||||
|
||||
return redirect()->to(site_url('bag/receiving/batch?company_idx=' . $companyIdx . '&bag_code=' . rawurlencode($bagCode)))
|
||||
|
||||
@@ -25,6 +25,12 @@ class Home extends BaseController
|
||||
return view('bag/layout/workspace');
|
||||
}
|
||||
|
||||
// 워크스페이스 탭(iframe) 안에서 세션이 만료된 경우: 공개 랜딩 대신 로그인으로 보내
|
||||
// 로그인 페이지의 프레임 이탈 스크립트가 상위 창 전체를 로그인으로 전환하게 한다.
|
||||
if ($this->isEmbeddedRequest()) {
|
||||
return redirect()->to(base_url('login'));
|
||||
}
|
||||
|
||||
return view('welcome_message');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user