diff --git a/app/Config/Constants.php b/app/Config/Constants.php index b378f24..b24722f 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -137,25 +137,23 @@ define('LAYOUTS', [ //SESSION 관련 define('SESSION_NAMES', [ 'RETURN_URL' => "return_url", - 'USER' => "user", -]); -//SESSION USER FIELD관련 -define('SESSION_USER_FIELDS', [ - 'PK' => 'uid', 'TITLE' => 'name', 'ROLE' => 'role' + 'ISLOGIN' => "islogined", + 'AUTH' => 'auth' ]); +define('AUTH_FIELDS', ['id', 'title', 'role']); //인증 관련 define('AUTH_ADAPTERS', [ 'Local' => [ - 'DEBUG' => getenv("auth.loca.debug") ?? false, + 'DEBUG' => getenv("auth.loca.debug") ?: false, ], 'Google' => [ - 'DEBUG' => getenv("auth.google.debug") ?? false, - 'ICON' => getenv("auth.google.icon") ?? '', + 'DEBUG' => getenv("auth.google.debug") ?: false, + 'ICON' => getenv("auth.google.icon") ?: '', 'CLIENT_ID' => getenv("auth.google.client.id"), 'CLIENT_KEY' => getenv("auth.google.client.key"), 'CALLBACK_URL' => getenv("auth.google.client.callback_url"), - 'TOKEN_NAME' => getenv('auth.google.client.token_name') ?? "access_token", + 'TOKEN_NAME' => getenv('auth.google.client.token_name') ?: "access_token", ], ]); //등급 관련 @@ -168,10 +166,10 @@ define('STATUS', ["use" => "사용", "unuse" => "사용않함",]); //Upload , Download 관련 define('PATHS', [ - 'EXCEL' => getenv('path.excel') ?? "../writable/Excel", - 'UPLOAD' => getenv('path.upload') ?? "../writable/uploads", - 'DOWNLOAD' => getenv('path.download') ?? "../writable/download", - 'API' => getenv('path.api') ?? "../writable/api", + 'EXCEL' => getenv('path.excel') ?: "../writable/Excel", + 'UPLOAD' => getenv('path.upload') ?: "../writable/uploads", + 'DOWNLOAD' => getenv('path.download') ?: "../writable/download", + 'API' => getenv('path.api') ?: "../writable/api", ]); foreach (PATHS as $key => $path) { if (!is_dir(APPPATH . $path)) { @@ -194,14 +192,14 @@ define('AUDIOS', [ //Default값 정의 define('DEFAULTS', [ - 'ROLE' => getenv('default.role') ?? "user", - 'STATUS' => getenv('default.status') ?? "use", - 'EMPTY' => getenv('default.empty') ?? "", - 'PERPAGE' => getenv('default.perpage') ?? 20, + 'ROLE' => getenv('default.role') ?: "user", + 'STATUS' => getenv('default.status') ?: "use", + 'EMPTY' => getenv('default.empty') ?: "", + 'PERPAGE' => getenv('default.perpage') ?: 20, ]); //UUID초기값 정의 define('UUIDS', [ - 'NAMESPACE' => getenv('uuid.namespace') ?? "8fc990b07418d5826d98de952cfb268dee4a23a3", - 'SECRET' => getenv('uuid.secret') ?? "delftstack1", + 'NAMESPACE' => getenv('uuid.namespace') ?: "8fc990b07418d5826d98de952cfb268dee4a23a3", + 'SECRET' => getenv('uuid.secret') ?: "delftstack1", ]); diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 885e815..1846dee 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -86,21 +86,6 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au $routes->get('toggle/(:num)/(:hash)', 'BoardController::toggle/$1/$2', ['filter' => 'authFilter:master,director']); $routes->post('batchjob', 'BoardController::batchjob', ['filter' => 'authFilter:master,director']); }); - $routes->group('hpilo', static function ($routes) { - $routes->get('', 'HPILOController::index'); - $routes->get('excel', 'HPILOController::excel'); - $routes->get('insert', 'HPILOController::insert_form', ['filter' => 'authFilter:master,director']); - $routes->post('insert', 'HPILOController::insert', ['filter' => 'authFilter:master,director']); - $routes->get('update/(:num)', 'HPILOController::update_form/$1'); - $routes->post('update/(:num)', 'HPILOController::update/$1'); - $routes->get('view/(:num)', 'HPILOController::view/$1'); - $routes->get('delete/(:num)', 'HPILOController::delete/$1', ['filter' => 'authFilter:master,director']); - $routes->get('toggle/(:num)/(:hash)', 'HPILOController::toggle/$1/$2', ['filter' => 'authFilter:master,director']); - $routes->post('batchjob', 'HPILOController::batchjob', ['filter' => 'authFilter:master,director']); - $routes->post('console/(:num)', 'HPILOController::console/$1', ['filter' => 'authFilter:master,director']); - $routes->post('reset/(:num)/(:alpah)', 'HPILOController::reset/$1/$2', ['filter' => 'authFilter:master,director']); - $routes->post('reload/(:num)', 'HPILOController::reload/$1', ['filter' => 'authFilter:master,director']); - }); }); /* * -------------------------------------------------------------------- diff --git a/app/Controllers/AuthController.php b/app/Controllers/AuthController.php index 2ef9d8f..a3d421b 100644 --- a/app/Controllers/AuthController.php +++ b/app/Controllers/AuthController.php @@ -45,7 +45,7 @@ class AuthController extends BaseController 'hiddens' => [], ]; //RETURN_URL 존재하면 추가 - if (!$this->_session->get(SESSION_NAMES['RETURN_URL'])) { + if ($this->_session->get(SESSION_NAMES['RETURN_URL'])) { $this->_viewDatas['forms']['hiddens'][SESSION_NAMES['RETURN_URL']] = $this->_session->get(SESSION_NAMES['RETURN_URL']); } $this->_viewDatas['login_buttons'] = array(); @@ -71,7 +71,7 @@ class AuthController extends BaseController public function logout() { //로그인 여부 확인후 Session에 Login 정보 삭제 - if ($this->_session->get(SESSION_NAMES['USER'])) { + if ($this->_session->get(SESSION_NAMES['ISLOGIN'])) { session_destroy(); } return redirect()->route('/'); diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index 961e8f5..5995fdd 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -66,6 +66,12 @@ abstract class BaseController extends Controller 'layout' => LAYOUTS['empty'], 'title' => '' ]; + + //로그인정보처리 + $this->_viewDatas[SESSION_NAMES['ISLOGIN']] = $this->_session->get(SESSION_NAMES['ISLOGIN']); + if ($this->_viewDatas[SESSION_NAMES['ISLOGIN']]) { + $this->_viewDatas[SESSION_NAMES['AUTH']] = $this->_session->get(SESSION_NAMES['AUTH']); + } } //Field별 Form Option용 diff --git a/app/Entities/UserEntity.php b/app/Entities/UserEntity.php index 6b0de1b..a187cdc 100644 --- a/app/Entities/UserEntity.php +++ b/app/Entities/UserEntity.php @@ -18,6 +18,11 @@ class UserEntity extends CommonEntity { return $this->attributes['name']; } + public function getRole() + { + return $this->attributes['role']; + } + public function getPassword() { return $this->attributes['passwd']; diff --git a/app/Filters/AuthFilter.php b/app/Filters/AuthFilter.php index dfac979..211d8f5 100644 --- a/app/Filters/AuthFilter.php +++ b/app/Filters/AuthFilter.php @@ -26,16 +26,15 @@ class AuthFilter implements FilterInterface public function before(RequestInterface $request, $arguments = null) { // 로그인을 했으면 - if (session()->get(SESSION_NAMES['USER'])) { - $userSessions = session()->get(SESSION_NAMES['USER']); + if (session()->get(SESSION_NAMES['ISLOGIN'])) { + $auth = session()->get(SESSION_NAMES['AUTH']); + // dd($auth); // 회원 ROLE이 필요ROLE 목록에 존재하지 않으면(ACL) - if (!in_array($userSessions[SESSION_USER_FIELDS['ROLE']], $arguments)) { + if (!in_array($auth['role'], $arguments)) { return redirect()->to('/login')->with( 'error', sprintf( - "%s 회원님은 %s로서 접속에 필요한 권한[%s]이 없습니다. ", - $userSessions[SESSION_USER_FIELDS['TITLE']], - $userSessions[SESSION_USER_FIELDS['ROLE']], + "{$auth['role']},{$$auth['title']}회원님은 접속에 필요한 권한[%s]이 없습니다. ", implode(",", $arguments) ) ); diff --git a/app/Libraries/Adapter/Auth/Adapter.php b/app/Libraries/Adapter/Auth/Adapter.php index bab3357..7b2ec5f 100644 --- a/app/Libraries/Adapter/Auth/Adapter.php +++ b/app/Libraries/Adapter/Auth/Adapter.php @@ -46,12 +46,23 @@ abstract class Adapter return $this->_userSNSModel; } - protected function setUserSession(UserEntity $entity): void + protected function signin_process(UserEntity $entity): void { - $datas = array(SESSION_NAMES['USER'] => array()); - foreach (SESSION_USER_FIELDS as $key => $field) { - $datas[SESSION_NAMES['USER']][$field] = $entity->$field; + $this->_session->set(SESSION_NAMES['ISLOGIN'], true); + $auths = []; + foreach (AUTH_FIELDS as $field) { + switch ($field) { + case 'id': + $auths[$field] = $entity->getPrimaryKey(); + break; + case 'title': + $auths[$field] = $entity->getTitle(); + break; + case 'role': + $auths[$field] = $entity->getRole(); + break; + } } - $this->_session->set($datas); + $this->_session->set(SESSION_NAMES['AUTH'], $auths); } } diff --git a/app/Libraries/Adapter/Auth/GoogleAdapter.php b/app/Libraries/Adapter/Auth/GoogleAdapter.php index 00e41b2..fe50403 100644 --- a/app/Libraries/Adapter/Auth/GoogleAdapter.php +++ b/app/Libraries/Adapter/Auth/GoogleAdapter.php @@ -97,23 +97,25 @@ class GoogleAdapter extends Adapter // 'picture' => 'https://lh3.googleusercontent.com/a/AAcHTteFSgefsdfsdRJBkJA2tBEmg4PQrvI1Ta_5IXu5=s96-c', // 'verifiedEmail' => true, // )) - //조건에 해당하는 사용자가 있는지 검사 + //조건에 해당하는 이미 등록된 사용자가 있는지 검사 $snsEntity = $this->getUserSNSModel()->asObject(UserSNSEntity::class)->where( array("site" => $this->getSiteName(), "id" => $result['id']) )->first(); + //snsEntity 없으면 신규등록 if (is_null($snsEntity)) { $snsEntity = $this->getUserSNSModel()->create($this->getSiteName(), $result); } - if (!$snsEntity->user_id) { - throw new \Exception($this->getSiteName() . "의{$result['email']}:{$result['name']}님은 아직 사용자 지정이 되지 않았습니다."); - } + //상태가 use(승인완료)가 아니라면 if ($snsEntity->status !== DEFAULTS['STATUS']) { throw new \Exception($this->getSiteName() . "의{$result['email']}:{$result['name']}님은 " . lang("Admin/UserSNS.label." . $snsEntity->status) . "입니다"); } - //인증된 사용자 정보를 가져온후 세션 정보 처리 + //user_id가 연결되어있지 않았다면 + if (!$snsEntity->user_id) { + throw new \Exception($this->getSiteName() . "의{$result['email']}:{$result['name']}님은 아직 사용자 지정이 되지 않았습니다. "); + } + //인증된 사용자 정보를 가져온후 로그인처리 $entity = $this->getUserModel()->getEntity($snsEntity->user_id); - //Session에 인증정보 설정 - $this->setUserSession($entity); + $this->signin_process($entity); return $entity; } catch (\Exception $e) { throw new \Exception("관리자에게 문의하시기 바랍니다.
{$e->getMessage()}"); diff --git a/app/Libraries/Adapter/Auth/LocalAdapter.php b/app/Libraries/Adapter/Auth/LocalAdapter.php index aa3e550..01cfb02 100644 --- a/app/Libraries/Adapter/Auth/LocalAdapter.php +++ b/app/Libraries/Adapter/Auth/LocalAdapter.php @@ -30,7 +30,7 @@ class LocalAdapter extends Adapter throw new \Exception("암호가 맞지않습니다."); } //Session에 인증정보 설정 - $this->setUserSession($entity); + $this->signin_process($entity); return $entity; } } diff --git a/app/Models/BoardModel.php b/app/Models/BoardModel.php index 655ef18..801948d 100644 --- a/app/Models/BoardModel.php +++ b/app/Models/BoardModel.php @@ -48,17 +48,27 @@ class BoardModel extends CommonModel { switch ($field) { case 'passwd': - return password_hash($value, PASSWORD_DEFAULT); + return $value ? password_hash($value, PASSWORD_DEFAULT) : ""; break; case 'content': return htmlentities($value); break; + case 'status': + return $value ?: DEFAULTS['STATUS']; + break; + default: + return $value; + break; } - return $value; } public function create(array $formDatas): BoardEntity { $entity = new BoardEntity($formDatas); + //로그인 여부 확인후 필요한 데이터 저장 + if (session()->get(SESSION_NAMES['ISLOGIN'])) { + $auth = session()->get(SESSION_NAMES['AUTH']); + $entity->user_uid = $auth['id']; + } foreach ($formDatas as $field => $value) { $entity->$field = $this->changeFormData($field, $value); } diff --git a/app/Models/LoggerModel.php b/app/Models/LoggerModel.php index e0b324a..cb91808 100644 --- a/app/Models/LoggerModel.php +++ b/app/Models/LoggerModel.php @@ -43,9 +43,9 @@ class LoggerModel extends CommonModel { $entity = new LoggerEntity($formDatas); //로그인 여부 확인후 필요한 데이터 저장 - if (session()->get(SESSION_NAMES['USER'])) { - $userSessions = session()->get(SESSION_NAMES['USER']); - $entity->user_uid = $userSessions[SESSION_USER_FIELDS['PK']]; + if (session()->get(SESSION_NAMES['ISLOGIN'])) { + $auth = session()->get(SESSION_NAMES['AUTH']); + $entity->user_uid = $auth['id']; } return parent::create_process($entity); } diff --git a/app/Views/layouts/admin/left_menu.php b/app/Views/layouts/admin/left_menu.php index 7a0f090..a6fb54c 100644 --- a/app/Views/layouts/admin/left_menu.php +++ b/app/Views/layouts/admin/left_menu.php @@ -6,6 +6,5 @@
include($layout['path'] . '/left_menu/base'); ?> include($layout['path'] . '/left_menu/board'); ?> - include($layout['path'] . '/left_menu/hpilo'); ?>
\ No newline at end of file diff --git a/app/Views/layouts/admin/member_link.php b/app/Views/layouts/admin/member_link.php index 2c62983..a0b5297 100644 --- a/app/Views/layouts/admin/member_link.php +++ b/app/Views/layouts/admin/member_link.php @@ -1,13 +1,12 @@