실사 저장 안정화와 메뉴 운영 정책을 일관되게 반영한다.
실사 저장값이 페이지 이동 후 원복되지 않도록 저장/조회 경로를 보강하고, 코드 범위 보정과 bis 간 동기화를 추가했다. 또한 메뉴 관리를 레벨4 이상으로 제한하고 메뉴 변경 사항을 모든 지자체에 일괄 반영하도록 동기화 로직을 도입했다. Made-with: Cursor
This commit is contained in:
@@ -23,6 +23,9 @@ class Menu extends BaseController
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
if ($deny = $this->denyUnlessLevel4Plus()) {
|
||||
return $deny;
|
||||
}
|
||||
helper('admin');
|
||||
$lgIdx = admin_effective_lg_idx();
|
||||
if ($lgIdx === null) {
|
||||
@@ -93,6 +96,9 @@ class Menu extends BaseController
|
||||
*/
|
||||
public function list()
|
||||
{
|
||||
if ($deny = $this->denyUnlessLevel4Plus(true)) {
|
||||
return $deny;
|
||||
}
|
||||
$lgIdx = admin_effective_lg_idx();
|
||||
if ($lgIdx === null) {
|
||||
return $this->response->setJSON(['status' => 0, 'msg' => '지자체를 선택하세요.']);
|
||||
@@ -112,6 +118,9 @@ class Menu extends BaseController
|
||||
*/
|
||||
public function store()
|
||||
{
|
||||
if ($deny = $this->denyUnlessLevel4Plus()) {
|
||||
return $deny;
|
||||
}
|
||||
$lgIdx = admin_effective_lg_idx();
|
||||
if ($lgIdx === null) {
|
||||
return redirect()->to(base_url('admin/select-local-government'))
|
||||
@@ -144,6 +153,7 @@ class Menu extends BaseController
|
||||
if ($mmPidx > 0) {
|
||||
$this->menuModel->updateCnode($mmPidx, 1);
|
||||
}
|
||||
$this->menuModel->syncTypeToAllLgs($mtIdx, $lgIdx);
|
||||
return redirect()->back()->with('success', '메뉴가 등록되었습니다.');
|
||||
}
|
||||
|
||||
@@ -152,6 +162,9 @@ class Menu extends BaseController
|
||||
*/
|
||||
public function update(int $id)
|
||||
{
|
||||
if ($deny = $this->denyUnlessLevel4Plus()) {
|
||||
return $deny;
|
||||
}
|
||||
$lgIdx = admin_effective_lg_idx();
|
||||
if ($lgIdx === null) {
|
||||
return redirect()->to(base_url('admin/select-local-government'))
|
||||
@@ -171,6 +184,7 @@ class Menu extends BaseController
|
||||
'mm_is_view' => $this->request->getPost('mm_is_view') ? 'Y' : 'N',
|
||||
];
|
||||
$this->menuModel->update($id, $data);
|
||||
$this->menuModel->syncTypeToAllLgs((int) $row->mt_idx, $lgIdx);
|
||||
return redirect()->back()->with('success', '메뉴가 수정되었습니다.');
|
||||
}
|
||||
|
||||
@@ -179,6 +193,9 @@ class Menu extends BaseController
|
||||
*/
|
||||
public function delete(int $id)
|
||||
{
|
||||
if ($deny = $this->denyUnlessLevel4Plus()) {
|
||||
return $deny;
|
||||
}
|
||||
$lgIdx = admin_effective_lg_idx();
|
||||
if ($lgIdx === null) {
|
||||
return redirect()->to(base_url('admin/select-local-government'))
|
||||
@@ -190,6 +207,7 @@ class Menu extends BaseController
|
||||
}
|
||||
$result = $this->menuModel->deleteSafe($id);
|
||||
if ($result['ok']) {
|
||||
$this->menuModel->syncTypeToAllLgs((int) $row->mt_idx, $lgIdx);
|
||||
return redirect()->back()->with('success', '메뉴가 삭제되었습니다.');
|
||||
}
|
||||
return redirect()->back()->with('error', $result['msg']);
|
||||
@@ -200,6 +218,9 @@ class Menu extends BaseController
|
||||
*/
|
||||
public function move()
|
||||
{
|
||||
if ($deny = $this->denyUnlessLevel4Plus()) {
|
||||
return $deny;
|
||||
}
|
||||
$lgIdx = admin_effective_lg_idx();
|
||||
if ($lgIdx === null) {
|
||||
return redirect()->to(base_url('admin/select-local-government'))
|
||||
@@ -209,7 +230,12 @@ class Menu extends BaseController
|
||||
if (! is_array($ids) || empty($ids)) {
|
||||
return redirect()->back()->with('error', '순서를 적용할 메뉴가 없습니다.');
|
||||
}
|
||||
$firstId = (int) ($ids[0] ?? 0);
|
||||
$firstRow = $firstId > 0 ? $this->menuModel->find($firstId) : null;
|
||||
$this->menuModel->setOrder($ids, $lgIdx);
|
||||
if ($firstRow && (int) $firstRow->lg_idx === $lgIdx) {
|
||||
$this->menuModel->syncTypeToAllLgs((int) $firstRow->mt_idx, $lgIdx);
|
||||
}
|
||||
return redirect()->back()->with('success', '순서가 적용되었습니다.');
|
||||
}
|
||||
|
||||
@@ -266,4 +292,27 @@ class Menu extends BaseController
|
||||
|
||||
return (int) $types[0]->mt_idx;
|
||||
}
|
||||
|
||||
/**
|
||||
* 메뉴 관리는 레벨4 이상(슈퍼/본부 관리자)만 허용.
|
||||
*
|
||||
* @return \CodeIgniter\HTTP\RedirectResponse|\CodeIgniter\HTTP\ResponseInterface|null
|
||||
*/
|
||||
private function denyUnlessLevel4Plus(bool $json = false)
|
||||
{
|
||||
$level = (int) session()->get('mb_level');
|
||||
if (Roles::isSuperAdminEquivalent($level)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($json) {
|
||||
return $this->response->setJSON([
|
||||
'status' => 0,
|
||||
'msg' => '메뉴 관리는 레벨4 이상만 접근할 수 있습니다.',
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect()->to(base_url('admin/dashboard'))
|
||||
->with('error', '메뉴 관리는 레벨4 이상만 접근할 수 있습니다.');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user