class_name .= "User"; $this->class_path .= $this->class_name; $this->view_path = strtolower($this->view_root . $this->class_name); $this->title = lang("{$this->class_path}.title"); helper($this->class_path); } protected function getModel(): UserModel { if ($this->_model === null) { $this->_model = new UserModel(); } return $this->_model; } protected function setFormFieldRule($field, Validation $validation, string $action): Validation { switch ($field) { case 'role': //아래 Rule Array는 필드명.* checkbox를 사용 $validation->setRule($field . ".*", $field, $this->getModel()->getFieldRule($action, $field)); break; default: $validation = parent::setFormFieldRule($field, $validation, $action); break; } return $validation; } protected function getFormFieldOption(string $field, array $options = []): array { switch ($field) { default: $options = parent::getFormFieldOption($field, $options); break; } return $options; } protected function getFormData(string $field, array $formDatas): array { switch ($field) { case 'role': $roles = $this->request->getVar($field) ?? []; if (!count($roles)) { throw new \Exception("권한이 지정되지 않았습니다."); } $formDatas[$field] = implode(DEFAULTS["DELIMITER_ROLE"], $roles); break; default: $formDatas = parent::getFormData($field, $formDatas); break; } return $formDatas; } private function init(string $action): void { $this->action = $action; $this->fields = ['id', 'passwd']; $this->field_rules = $this->getModel()->getFieldRules($this->action, $this->fields); } //로그인화면 public function create_form(): RedirectResponse|string { $this->init('create'); return $this->create_form_procedure(); } //로그인처리 public function create(): RedirectResponse|string { $this->init(__FUNCTION__); $this->formDatas = $this->getFormDatas(); $id = $this->request->getVar('id'); $passwd = $this->request->getVar('passwd'); if (!$id) { session()->setFlashdata('error', "사용자ID를 입력해주세요!"); return redirect()->back()->withInput(); } if (!$passwd) { session()->setFlashdata('error', "암호를 입력해주세요!"); return redirect()->back()->withInput(); } $entity = $this->getModel()->getEntityByID($id); if (is_null($entity) || !isset($entity->passwd)) { session()->setFlashdata('error', "사용자ID: {$id}가 존재하지 않습니다."); return redirect()->back()->withInput(); } if (password_verify($passwd, $entity->passwd)) { //Session에 Login 정보전달 $authData = [ 'uid' => $entity->getPK(), 'name' => $entity->getTitle(), 'email' => $entity->email, 'role' => $entity->role, SESSION_NAMES['ISLOGIN'] => true ]; session()->set($authData); return redirect()->to($this->request->getVar(SESSION_NAMES['RETURN_URL']) ? $this->request->getVar(SESSION_NAMES['RETURN_URL']) : "/"); } else { session()->setFlashdata('error', '암호가 맞지 않습니다.'); return redirect()->back()->withInput(); } } //로그아웃 public function logout(): RedirectResponse { //Session에 Login 정보 삭제 session()->set([SESSION_NAMES['ISLOGIN'] => false]); session_destroy(); return redirect()->route('/'); } }