servermgrv2 init...
This commit is contained in:
parent
92dd690d35
commit
5d1ddc3c8b
@ -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") ?? '<img src="/images/auth/google_login_button.png"/>',
|
||||
'DEBUG' => getenv("auth.google.debug") ?: false,
|
||||
'ICON' => getenv("auth.google.icon") ?: '<img src="/images/auth/google_login_button.png"/>',
|
||||
'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",
|
||||
]);
|
||||
|
||||
@ -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']);
|
||||
});
|
||||
});
|
||||
/*
|
||||
* --------------------------------------------------------------------
|
||||
|
||||
@ -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('/');
|
||||
|
||||
@ -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용
|
||||
|
||||
@ -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'];
|
||||
|
||||
@ -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)
|
||||
)
|
||||
);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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("관리자에게 문의하시기 바랍니다.<BR>{$e->getMessage()}");
|
||||
|
||||
@ -30,7 +30,7 @@ class LocalAdapter extends Adapter
|
||||
throw new \Exception("암호가 맞지않습니다.");
|
||||
}
|
||||
//Session에 인증정보 설정
|
||||
$this->setUserSession($entity);
|
||||
$this->signin_process($entity);
|
||||
return $entity;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -6,6 +6,5 @@
|
||||
<div class="accordion">
|
||||
<?= $this->include($layout['path'] . '/left_menu/base'); ?>
|
||||
<?= $this->include($layout['path'] . '/left_menu/board'); ?>
|
||||
<?= $this->include($layout['path'] . '/left_menu/hpilo'); ?>
|
||||
</div>
|
||||
</div>
|
||||
@ -1,13 +1,12 @@
|
||||
<link href="/css/admin/member_link.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<ul class="member-link navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item dropdown">
|
||||
<?php if (session()->get(SESSION_NAMES['USER'])) : ?>
|
||||
<?php $userSessions = session()->get(SESSION_NAMES['USER']); ?>
|
||||
<?php if (SESSION_NAMES['ISLOGIN']) : ?>
|
||||
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fa fa-id-card"></i> <?= $userSessions[SESSION_USER_FIELDS['TITLE']] ?>
|
||||
<i class="fa fa-id-card"></i> <?= $auth['title'] ?>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a href="/admin/user/update/<?= $userSessions[SESSION_USER_FIELDS['PK']] ?>"><i class="fa fa-cog"></i>내정보수정</a></li>
|
||||
<li><a href="/admin/user/update/<?= $auth['id'] ?>"><i class="fa fa-cog"></i>내정보수정</a></li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user