defined('IN_PHPCMS') 또는 종료('권한 리소스가 없습니다.');
/* phpcms v9는 세션을 사용하여 로그인하며 세션을 저장하는 방법에는 두 가지가 있습니다. 하나는 데이터베이스 저장소입니다. . , 하나는 파일 저장 방법이고 기본값은 데이터베이스 저장 방법입니다. 가끔 데이터베이스 방식이 작동하지 않을 경우, 캐시 구성 'session_storage' => 'mysql'에서 세션의 저장 방식을 수정하여 //세션 구성 'session_storage' => 'files'로 변경할 수 있습니다. 어쨌든 , 비워둘 수 없습니다. 그렇지 않으면 로그인이 성공하지 못합니다. */
$session_storage = 'session_'.pc_base::load_config('system','session_storage'); //세션 저장 방법은
pc_base::load_sys_class($session_storage)
if (param::get_cookie('sys_lang')) { //언어팩
Define('SYS_STYLE',param::get_cookie('sys_lang')) // 로그인 시 설정
} else {
정의('SYS_STYLE','zh-cn');
}
//백그라운드에서 정의
define('IN_ADMIN',true);
클래스 관리자 {
public $userid;
public $username;
public function __construct() {
self::check_admin() // 사용자가 로그인했는지 확인
self::check_priv( ); / /사용자에게 권한이 있는지 확인
pc_base::load_app_func('global','admin');
if (!module_exists(ROUTE_M)) showmessage(L('module_not_exists'));// 모듈이 존재하지 않습니다. 프롬프트 정보
self::manage_log();
self::check_ip(); //금지된 IP 감지
self::lock_screen() //잠금 화면
self :: check_hash(); //해시 보안 검증
if(pc_base::load_config('system','admin_url') && $_SERVER["HTTP_HOST"]!= pc_base::load_config('system','admin_url ') ) {
헤더("http/1.1 403 Forbidden"); / **
* 사용자가 로그인했는지 확인
*/
최종 공개 함수 check_admin() {
//If in 로그인 인터페이스
//ROUTE_M은 모델을 가져오고, ROUTE_C는 컨트롤러를 가져오고, ROUTE_A는 이벤트를 가져옵니다.
if(ROUTE_M = = 'admin' && Route_c == 'Index' && in_array (Route_a, Array ('Login' , 'PUBLIC_CARD')) {
true를 반환합니다. 🎜> } else {
~ // 세션에 userid, roleid가 있는지 확인하고, 있으면 처리하지 말고, 없으면 로그인 인터페이스로 돌아갑니다.
$userid = param::get_cookie('userid'); !isset($_SESSION['userid']) || !isset($_SESSION['roleid']) || !$_SESSION['userid'] || !$_SESSION['roleid'] || $userid != $_SESSION['userid']) showmessage(L('admin_login'),'?m=admin&c=index&a=login')
}
}
/**
* 배경 템플릿 로드
* @param string $file 파일 이름
* @param string $m 모델 이름
* /
최종 공개 정적 함수 admin_tpl($file, $m = '') {
$m = 비어 있음($m) : $m ;
if(empty($m)) return false ; //false를 반환합니다
$m이 비어 있으면 return PC_PATH.'modules'.DIRECTORY_SEPARATOR.$m.DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.$file. '.tpl.php'; //modules/ROUTE_M/templates/로 돌아갑니다. 접미사는 $file.tpl.php
}
/**
* 가져오기 관리 메뉴
* 상위 ID로 메뉴 하위 항목 찾기
* @param 정수 $parentid 상위 메뉴 ID
* @param 정수 $with_self 자신을 포함할지 여부
* @param 메뉴는 다음에 저장됩니다. 메뉴 데이터 테이블.2차 개발에서 새 메뉴를 추가해야 하는 경우 해당 메뉴의 id, 이름, parentid, m, c, a, 데이터 및 기타 정보를 메뉴 테이블에 삽입하기만 하면 됩니다. 물론, 최고관리자 이외의 역할이 메뉴에 접근할 수 있도록 하기 위해서는 admin_role_priv 테이블에 권한을 설정해야 한다.
*/
final public static function admin_menu($parentid, $with_self = 0) {
$parentid = intval($parentid) //변수의 정수 값을 가져옵니다. 기본값은 10진수입니다.
$ menudb = pc_base::load_model('menu_model'); //데이터베이스 및 기타 작업을 구현하려면 모델 하위 클래스를 참조하세요.
$site_model = param::get_cookie('site_model') //모델 하위 클래스
$where = array('parentid'=>$parentid,'display'=>1); //부모 ID 상위 노드 ID
if ($site_model && $parentid) {
$where[$site_model] = 1;
} > // 모든 하위 메뉴 가져오기
$ result = $ menudb- & gt; select ($ when, '*', 1000, 'listorder asc'); 이전 번호를 편집할 수 있습니다.
if($with_self) {
$result2[] = $menudb->get_one(array('id'=>$parentid));
$ result = array_merge ($result2,$result); //array_merge — 배열의 값을 이전 배열에 할당
} }
//권한 확인. 최고 관리자인 경우 모두 반환
if($_SESSION['roleid'] == 1) return $result; //세션에 역할 ID 저장
//권한이 있는 부분을 알아냅니다. admin_role_priv_model 테이블로)
$array = array();
$privdb = pc_base::load_model('admin_role_priv_model') // 모델 하위 클래스 호출
$siteid = param::get_cookie('siteid') ;
foreach($result as $v) {
$action = $v['a']
//공개 메소드의 경우
if(preg_match('/^public_/ ') ,$action)) { //접두사는 public
$array[] = $v;
} else {
//ajax로 시작하는 메소드의 경우 메소드 이름의 후반부만 차단됨
if(preg_match('/^ajax_([a-z]+)_/',$action,$_match)) $action = $_match[1]
, c, a의 작업 허가 기록 / / 현재 역할 $roleid에 해당 m, c, a의 작업 권한 레코드가 있는지 확인
$v['m'],'c'=>$v['c'],'a'= >$action,'roleid'=>$_SESSION['roleid'],'siteid'=> ;$siteid));
If($r) $array[] = $v; 아르 자형. .$v를 $array[]
에 할당 }
}
} return $array;
}
/**
* 메뉴 헤더 메뉴 탐색 가져오기
*
* @param $parentid 메뉴 ID
* @param은 주로 관련 메뉴의 모든 하위 메뉴 탐색을 생성하는 데 사용됩니다(일반적으로 iframe 콘텐츠 페이지에 표시됨) 상단)
*/
final public static function submenu($parentid = '', $big_menu = false) {
if(empty($parentid)) {
$menudb = pc_base::load_model('menu_model') ; //참조 모델 하위 클래스
$r = $menudb->get_one(array('m'=>ROUTE_M,'c'=>ROUTE_C,'a'=>ROUTE_A));
$parentid = $_GET['menuid'] = $r['id']; //
}
$array = self::admin_menu($parentid,1); 상위 메뉴 포함
> ) return '';
$string = '';
$pc_hash = $_SESSION['pc_hash'];
foreach($array as $_value) {
if (!isset($_GET ['s'])) {
$classname = ROUTE_M == $_value['m'] && ROUTE_C == $_value['c'] && ROUTE_A == $_value['a '] ? 'class= "on"' : '';
. _GET['s'] == $_s ? 'class="on"' : '; if($classname) {
$string .= "".L($_value['name'])."< /em>< 범위>|";
']."&c=".$_value['c']."&a=".$_value['a']."&menuid=$parentid&pc_hash=$pc_hash ".'&'.$_value['data'] ."' $classname>".L($_value['name'])."";
}
}
} $string = substr($string,0,-14);
return $string;
}
/ **
* 현재 위치
*
* @param $id 메뉴 ID
*/
//재귀를 사용하여 특정 메뉴의 모든 상위 메뉴 레벨을 가져와서 HTML 조각으로 반환합니다.
final public static function current_pos($id) {
$menudb = pc_base::load_model('menu_model');
$r = $menudb->get_one(array('id'=>$id),'id,name,parentid');
$str = '';
if($r['parentid']) {
$str = self::current_pos($r['parentid']) > }
/**
* 현재 사이트 ID 가져오기
*/
final public static function get_siteid() {
return get_siteid();
}
/**
*
* 현재 사이트 정보 가져오기
* @param 정수 $siteid 사이트 ID 번호, 비어 있으면 현재 사이트 정보 가져오기
* @return array
* 웹사이트 가져오기 로그인 시 인터페이스
*/
최종 공개 정적 함수 get_siteinfo($siteid = '') {
if ($siteid == '') $siteid = self::get_siteid();
if (empty($ siteid)) return false;
$sites = pc_base::load_app_class('sites', 'admin');
return $sites->get_by_id($siteid);
}
최종 공개 정적 함수 return_siteid() {
$sites = pc_base::load_app_class('sites', 'admin');
$siteid =explore(',',$sites->get_role_siteid($_SESSION['roleid) ']));
"""""""""""""""" 🎜> 최종 공개 함수 check_priv() {
//로그인 인터페이스: true가 반환되면 후속 실행이 실행됩니다. 코드가 종료됩니다
if(ROUTE_M =='admin' && ROUTE_C =='index' && in_array(ROUTE_A, array('login', 'init', 'public_card'))) return true; '] == 1) return true;
$siteid = param::get_cookie('siteid'); //사이트 ID
$action = ROUTE_A //메소드
$privdb = pc_base::load_model ('admin_role_priv_model');
if(preg_match('/^public_/',ROUTE_A)) return true; //메서드가 public_으로 시작하는 경우
if(preg_match('/^ajax_ ([A-Z]]+ ) _/', Route_a, $ __match)) {// Ajax_로 시작하는 방법, 후반부만 쿼리 조건으로 취함
$ Activity = $ _Match [1] // 매칭 매치 결과
}
//m, a, roleid 사이트 ID를 복합적으로 포함하거나 포함하지 않고 권한 레코드를 가져옵니다.
$r =$privdb->get_one(array('m'=>ROUTE_M,'c '= >ROUTE_C,'a'=>$action,'roleid'=>$_SESSION['roleid'],'siteid'=>$siteid));
if(!$r) showmessage (' 이 항목을 조작할 수 있는 권한이 없습니다','blank');
}
/**
* 허가 판단
*/
final private function prepare_log() {
//녹화 여부 결정
$setconfig = pc_base::load_config('system');
extract($setconfig);
if($admin_log==1){ //백그라운드 작업 로그 기록 여부
$action = ROUTE_A; // 메소드
If ($ ACTION == '' || Strchr ($ Action, 'Public') || $ Action == 'Init' || $ Action == 'Public_current_pos') {
false 반환 ; //위 방법 제외
else {
$ip = ip(); $userid = isset($_SESSION['userid']) $_SESSION['userid'] : '';//Userid
$time = date('Y-m-d H-i-s',SYS_TIME ); //시스템 시간
$url = '?m='.ROUTE_M.'&c='.ROUTE_C.'&a='.ROUTE_A; > $log->insert(array( 'module'=>ROUTE_M,'username'=>$username,'userid'=>$userid,'action'=>ROUTE_C, 'querystring'=> $url,'time'=>$ time,'ip'=>$ip)); //작업 로그를 기록하고 데이터베이스에 저장
private function check_ip(){
$this- >ipbanned = pc_base::load_model('ipbanned_model');
$this->ipbanned->check_ip();
}
/ **
*
* 백엔드 IP 금지 판정...
*/
final private function lock_screen() {
if(isset($_SESSION['lock_screen']) && $_SESSION['lock_screen']==1) {
if( preg_match('/^public_/', ROUTE_A) | |(ROUTE_M == '콘텐츠' && ROUTE_C == 'create_html') || (ROUTE_M == '해제') || (ROUTE_A == '로그인') || (ROUTE_M == '검색' && ROUTE_C == ' search_admin' && ROUTE_A=='createindex')) return true;
showmessage(L('admin_login'),'?m=admin&c=index&a=login')
}
}
/ **
* 잠금 화면 상태 확인
*/
최종 프라이빗 함수 check_hash() {
//퍼블릭 메소드, 관리 홈페이지, 로그인 인터페이스 등인 경우 해시 인증이 필요하지 않으니 허용
if(preg_match('/^public_/', ROUTE_A) || ROUTE_M =='admin' && ROUTE_C =='index' || in_array(ROUTE_A, array('login'))) {
return true && $_SESSION['pc_hash'] != '' && ($_SESSION['pc_hash'] == $_GET['pc_hash'])) {
~ 'pc_hash']) && $_SESSION['pc_hash'] != '' && ($_SESSION['pc_hash'] == $_POST['pc_hash'])) {
showmessage(L('hash_check_false'), HTTP_REFERER);
/**
* 배경 정보 목록 템플릿
* @param string $id 선택한 템플릿의 이름
* @param string $str
형식의 속성 이름*/