mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-04 01:01:41 +09:00
#124. 페이지 모듈에 열람/관리 권한 추가 및 이를 위해서 zbxe module 설정에 permission 속성 추가
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@2601 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
dc24001d46
commit
ce4afeaa13
16 changed files with 229 additions and 24 deletions
|
|
@ -19,6 +19,7 @@
|
|||
var $act = NULL; ///< action
|
||||
var $mid = NULL; ///< 모듈의 객체명
|
||||
var $document_srl = NULL; ///< 문서 번호
|
||||
var $module_srl = NULL; ///< 모듈의 번호
|
||||
|
||||
var $module_info = NULL; ///< 모듈의 정보
|
||||
|
||||
|
|
@ -31,7 +32,7 @@
|
|||
* 인자를 넘겨주지 않으면 현 페이지 요청받은 Request Arguments를 이용하여
|
||||
* 변수를 세팅한다.
|
||||
**/
|
||||
function ModuleHandler($module = '', $act = '', $mid = '', $document_srl = '') {
|
||||
function ModuleHandler($module = '', $act = '', $mid = '', $document_srl = '', $module_srl = '') {
|
||||
// 설치가 안되어 있다면 install module을 지정
|
||||
if(!Context::isInstalled()) {
|
||||
$this->module = 'install';
|
||||
|
|
@ -52,6 +53,9 @@
|
|||
if(!$document_srl) $this->document_srl = (int)Context::get('document_srl');
|
||||
else $this->document_srl = (int)$document_srl;
|
||||
|
||||
if(!$module_srl) $this->module_srl = (int)Context::get('module_srl');
|
||||
else $this->module_srl = (int)$module_srl;
|
||||
|
||||
// 기본 변수들의 검사 (XSS방지를 위한 기초적 검사)
|
||||
if($this->module && !eregi("^([a-z0-9\_\-]+)$",$this->module)) die(Context::getLang("msg_invalid_request"));
|
||||
if($this->mid && !eregi("^([a-z0-9\_\-]+)$",$this->mid)) die(Context::getLang("msg_invalid_request"));
|
||||
|
|
@ -70,13 +74,17 @@
|
|||
$oModuleModel = &getModel('module');
|
||||
|
||||
// document_srl이 있으면 document_srl로 모듈과 모듈 정보를 구함
|
||||
if($this->document_srl && !$this->mid) $module_info = $oModuleModel->getModuleInfoByDocumentSrl($this->document_srl);
|
||||
if($this->document_srl && !$this->mid && !$this->module_srl) $module_info = $oModuleModel->getModuleInfoByDocumentSrl($this->document_srl);
|
||||
if($this->module && $module_info->module != $this->module) unset($module_info);
|
||||
|
||||
// 아직 모듈을 못 찾았고 $mid값이 있으면 $mid로 모듈을 구함
|
||||
if(!$module_info && $this->mid) $module_info = $oModuleModel->getModuleInfoByMid($this->mid);
|
||||
if($this->module && $module_info->module != $this->module) unset($module_info);
|
||||
|
||||
// 모듈을 여전히(;;) 못 찾고 $module_srl이 있으면 해당 모듈을 구함
|
||||
if(!$module_info && $this->module_srl) $module_info = $oModuleModel->getModuleInfoByModuleSrl($this->module_srl);
|
||||
if($this->module && $module_info->module != $this->module) unset($module_info);
|
||||
|
||||
// 역시 모듈을 못 찾았고 $module이 없다면 기본 모듈을 찾아봄
|
||||
if(!$module_info && !$this->module) $module_info = $oModuleModel->getModuleInfoByMid();
|
||||
|
||||
|
|
|
|||
|
|
@ -92,15 +92,7 @@
|
|||
$grant->is_admin = false;
|
||||
}
|
||||
|
||||
// act값에 admin이 들어 있는데 관리자가 아닌 경우 오류 표시
|
||||
if(substr_count($this->act, 'Admin')) {
|
||||
if(!$is_logged) {
|
||||
$this->setAct("dispMemberLoginForm");
|
||||
} elseif(!$grant->is_admin) {
|
||||
return $this->stop('msg_not_permitted_act');
|
||||
}
|
||||
}
|
||||
|
||||
// module.xml 에 있는 권한 정보를 정리
|
||||
if($module_info->grants) {
|
||||
foreach($module_info->grants as $key => $val) {
|
||||
if(!$xml_info->grant->{$key}) {
|
||||
|
|
@ -160,6 +152,26 @@
|
|||
}
|
||||
}
|
||||
|
||||
// act값에 admin이 들어 있는데 관리자가 아닌 경우 오류 표시
|
||||
if(substr_count($this->act, 'Admin')) {
|
||||
// 로그인 되어 있지 않다면 무조건 금지
|
||||
if(!$is_logged) $this->setAct("dispMemberLoginForm");
|
||||
else {
|
||||
|
||||
$permitted = false;
|
||||
|
||||
// 최고관리자이면 무조건 패스~
|
||||
if($grant->is_admin) $permitted = true;
|
||||
|
||||
// 최고관리자가 아니더라도 module.xml에서 permission에 등록된 권한이 있으면 허용
|
||||
$permission_target = $xml_info->permission->{$this->act};
|
||||
if($permission_target && $grant->{$permission_target}) $permitted = true;
|
||||
|
||||
if(!$permitted) return $this->stop('msg_not_permitted_act');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 권한변수 설정
|
||||
$this->grant = $grant;
|
||||
Context::set('grant', $grant);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue