서버 열단, 리셋 부분 권한 추가
This commit is contained in:
@@ -11,6 +11,7 @@ $templates = new \League\Plates\Engine(__dir__.'/templates');
|
||||
$db = RootDB::db();
|
||||
$notice = $db->queryFirstField('SELECT `NOTICE` FROM `system` WHERE `NO`=1');
|
||||
$userGrade = $session->userGrade;
|
||||
$acl = $session->acl;
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@@ -34,7 +35,7 @@ $userGrade = $session->userGrade;
|
||||
<?=WebUtil::printJS('../d_shared/menu.js')?>
|
||||
<?=WebUtil::printJS('../js/title.js')?>
|
||||
|
||||
<?php if ($userGrade >= 5): ?>
|
||||
<?php if ($userGrade >= 5 || $acl): ?>
|
||||
<!-- 운영자 -->
|
||||
<?=WebUtil::printCSS('../css/admin_server.css')?>
|
||||
<?=WebUtil::printJS('../js/admin_server.js')?>
|
||||
@@ -110,8 +111,9 @@ if ($userGrade >= 5) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php
|
||||
if ($userGrade >= 5) {
|
||||
if ($userGrade >= 5 || $acl) {
|
||||
echo $templates->render('server_panel', []);
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -9,7 +9,7 @@ $userID = Session::getUserID();
|
||||
// 외부 파라미터
|
||||
|
||||
$db = RootDB::db();
|
||||
$member = $db->queryFirstRow('SELECT `id`, `name`, `grade`, `picture`, reg_date, third_use FROM `member` WHERE `NO` = %i', $userID);
|
||||
$member = $db->queryFirstRow('SELECT `id`, `name`, `grade`, `picture`, reg_date, third_use, acl FROM `member` WHERE `NO` = %i', $userID);
|
||||
|
||||
if(!$member['picture']){
|
||||
$picture = ServConfig::getSharedIconPath().'/default.jpg';
|
||||
@@ -42,6 +42,35 @@ if($member['grade'] == 6) {
|
||||
$grade = '블럭회원';
|
||||
}
|
||||
|
||||
$acl = [];
|
||||
//TODO: Acl을 관리하기 위한 별도의 객체 필요
|
||||
foreach(Json::decode($member['acl']??'{}') as $serverName=>$aclList){
|
||||
$serverKorName = AppConf::getList()[$serverName]->getKorName();
|
||||
$aclTextList = array_map(function($aclName){
|
||||
$aclText = "알수없음[{$aclName}]";
|
||||
switch($aclName){
|
||||
case 'openClose':$aclText='서버여닫기';break;
|
||||
case 'reset':$aclText='서버리셋';break;
|
||||
case 'update':$aclText='업데이트';break;
|
||||
case 'fullUpdate':$aclText='임의업데이트';break;
|
||||
case 'vote':$aclText='설문조사';break;
|
||||
case 'globalNotice':$aclText='전역공지';break;
|
||||
case 'notice':$aclText='공지';break;
|
||||
case 'blockGeneral':$aclText='장수징계';break;
|
||||
}
|
||||
return $aclText;
|
||||
}, $aclList);
|
||||
|
||||
$acl[] = sprintf("%s(%s)", $serverKorName, join(",", $aclTextList));
|
||||
}
|
||||
|
||||
if($acl){
|
||||
$acl = join(",<br>", $acl);
|
||||
}
|
||||
else{
|
||||
$acl = "-";
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success',
|
||||
@@ -51,5 +80,6 @@ Json::die([
|
||||
'picture'=>$picture,
|
||||
'global_salt'=>RootDB::getGlobalSalt(),
|
||||
'join_date'=>$member['reg_date'],
|
||||
'third_use'=>($member['third_use']!=0)
|
||||
'third_use'=>($member['third_use']!=0),
|
||||
'acl'=>$acl
|
||||
]);
|
||||
|
||||
@@ -18,50 +18,55 @@ $server = Util::getReq('server', 'string', '');
|
||||
|
||||
$db = RootDB::db();
|
||||
$userGrade = $session->userGrade;
|
||||
$acl = $session->acl;
|
||||
$session->setReadOnly();
|
||||
|
||||
if($userGrade < 5) {
|
||||
if($userGrade < 5 && !$acl) {
|
||||
Json::die([
|
||||
'result'=>'FAIL',
|
||||
'msg'=>'운영자 권한이 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
function doServerModeSet($server, $action, &$response){
|
||||
function doServerModeSet($server, $action, &$response, $session){
|
||||
|
||||
$serverList = AppConf::getList();
|
||||
$settingObj = $serverList[$server];
|
||||
$serverAcl = $session->acl[$server]??[];
|
||||
$userGrade = $session->userGrade;
|
||||
|
||||
$serverDir = $settingObj->getShortName();
|
||||
$serverPath = $settingObj->getBasePath();
|
||||
$realServerPath = realpath(dirname(__FILE__)).'/'.$serverPath;
|
||||
|
||||
if($action == 'close') { //폐쇄
|
||||
if($action == 'close' && ($userGrade >= 5 || in_array('openClose', $serverAcl))) { //폐쇄
|
||||
return $settingObj->closeServer();
|
||||
} elseif($action == 'reset') {//리셋
|
||||
} elseif($action == 'reset' && $userGrade >= 6) {//리셋
|
||||
//FIXME: reset, reset_full 구현
|
||||
if(file_exists($serverPath.'/d_setting/DB.php')){
|
||||
@unlink($serverPath.'/d_setting/DB.php');
|
||||
}
|
||||
|
||||
$response['installURL'] = $serverDir."/install.php";
|
||||
} elseif($action == 'open') {//오픈
|
||||
} elseif($action == 'open' && ($userGrade >= 5 || in_array('openClose', $serverAcl))) {//오픈
|
||||
return $settingObj->openServer();
|
||||
} else{
|
||||
$response['msg'] = '올바르지 않은 요청입니다';
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function doAdminPost($action, $notice, $server){
|
||||
function doAdminPost($action, $notice, $server, $session){
|
||||
$response = ['result' => 'FAIL'];
|
||||
|
||||
if($action == 'notice') {
|
||||
if($action == 'notice' && ($userGrade >= 5 || in_array('notice', $serverAcl))) {
|
||||
RootDB::db()->update('system', ['NOTICE'=>$notice], true);
|
||||
$response['result'] = 'SUCCESS';
|
||||
return $response;
|
||||
}
|
||||
|
||||
if(doServerModeSet($server, $action, $response)){
|
||||
if(doServerModeSet($server, $action, $response, $session)){
|
||||
$response['result'] = 'SUCCESS';
|
||||
return $response;
|
||||
}
|
||||
@@ -70,6 +75,6 @@ function doAdminPost($action, $notice, $server){
|
||||
|
||||
}
|
||||
|
||||
$response = doAdminPost($action, $notice, $server);
|
||||
$response = doAdminPost($action, $notice, $server, $session);
|
||||
|
||||
Json::die($response);
|
||||
|
||||
@@ -4,8 +4,7 @@ namespace sammo;
|
||||
require(__dir__.'/../vendor/autoload.php');
|
||||
|
||||
$session = Session::requireLogin([])->setReadOnly();
|
||||
|
||||
if($session->userGrade < 5){
|
||||
if($session->userGrade < 5 && !$session->acl){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다.'
|
||||
@@ -83,6 +82,7 @@ foreach (AppConf::getList() as $setting) {
|
||||
}
|
||||
|
||||
Json::die([
|
||||
'acl' => $session->acl,
|
||||
'server' => $server,
|
||||
'grade' => $session->userGrade
|
||||
]);
|
||||
+16
-11
@@ -44,12 +44,12 @@ require(__dir__.'/../vendor/autoload.php');
|
||||
<a href="entrance.php"><button id="btn_back1" class="with_skin">돌아가기</button></a>
|
||||
</caption>
|
||||
<colgroup>
|
||||
<col style="width:80px;" />
|
||||
<col style="width:80px;"/>
|
||||
<col style="width:80px;"/>
|
||||
<col style="width:80px;"/>
|
||||
<col style="width:80px;"/>
|
||||
<col/>
|
||||
<col style="width:80px;min-width:80px;" />
|
||||
<col style="width:80px;min-width:80px;"/>
|
||||
<col style="width:80px;min-width:80px;"/>
|
||||
<col style="width:80px;min-width:80px;"/>
|
||||
<col style="width:80px;min-width:80px;"/>
|
||||
<col style="min-width:80px;"/>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -59,19 +59,24 @@ require(__dir__.'/../vendor/autoload.php');
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="bg1">ID</th>
|
||||
<td>
|
||||
<td colspan="5">
|
||||
<span id="slot_id"></span>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="bg1">닉네임</th>
|
||||
<td style="height:36px;">
|
||||
<td colspan="5" style="height:36px;">
|
||||
<span id="slot_nickname"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="bg1">등급</th>
|
||||
<td>
|
||||
<td colspan="2">
|
||||
<span id="slot_grade"></span>
|
||||
</td>
|
||||
|
||||
<td colspan="3">
|
||||
<span id="slot_acl"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="bg1">가입일시</th>
|
||||
|
||||
Reference in New Issue
Block a user