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 @@