当前位置:首页 > CMS教程 > phpcms > 列表

【phpcms-v9】phpcms/modules/admin/classes/admin.class.php文件分析

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-24 09:57:45 浏览: 评论:0 
  1. <?php   
  2. defined('IN_PHPCMS'or exit('No permission resources.');   
  3. $session_storage = 'session_'.pc_base::load_config('system','session_storage');//session存储方式,默认为mysql   
  4. pc_base::load_sys_class($session_storage);   
  5. if(param::get_cookie('sys_lang')) {//语言包   
  6.     define('SYS_STYLE',param::get_cookie('sys_lang'));//在登陆的时候被设置   
  7. else {   
  8.     define('SYS_STYLE','zh-cn');   
  9. }   
  10. //定义在后台   
  11. define('IN_ADMIN',true);   
  12. class admin {   
  13.     public $userid;   
  14.     public $username;   
  15.        
  16.     public function __construct() {   
  17.         self::check_admin();//判断用户是否已经登录   
  18.         self::check_priv();   
  19.         pc_base::load_app_func('global','admin');   
  20.         if (!module_exists(ROUTE_M)) showmessage(L('module_not_exists'));//模块不存在的提示信息   
  21.         self::manage_log();   
  22.         self::check_ip();//检测被禁止的ip   
  23.         self::lock_screen();//锁屏   
  24.         self::check_hash();//hash   
  25.         if(pc_base::load_config('system','admin_url') && $_SERVER["HTTP_HOST"]!= pc_base::load_config('system','admin_url')) {   
  26.             Header("http/1.1 403 Forbidden");   
  27.             exit('No permission resources.');   
  28.         }   
  29.     }   
  30.        
  31.     /**  
  32.      * 判断用户是否已经登陆  
  33.      */   
  34.     final public function check_admin() {   
  35.         //如果在登录界面   
  36.         if(ROUTE_M =='admin' && ROUTE_C =='index' && in_array(ROUTE_A, array('login''public_card'))) {   
  37.             return true;//一旦返回true,将终止后续代码的执行   
  38.         } else {   
  39.             //判断session中是否有userid、roleid,如果有的话不做任何处理;如果没有的话,则返回到登录界面   
  40.             if(!isset($_SESSION['userid']) || !isset($_SESSION['roleid']) || !$_SESSION['userid'] || !$_SESSION['roleid']) showmessage(L('admin_login'),'?m=admin&c=index&a=login');   
  41.         }   
  42.     }   
  43.    
  44.     /**  
  45.      * 加载后台模板  
  46.      * @param string $file 文件名  
  47.      * @param string $m 模型名  
  48.      */   
  49.     final public static function admin_tpl($file$m = '') {   
  50.         $m = emptyempty($m) ? ROUTE_M : $m;   
  51.         if(emptyempty($m)) return false;   
  52.         return PC_PATH.'modules'.DIRECTORY_SEPARATOR.$m.DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.$file.'.tpl.php';   
  53.     }   
  54.        
  55.     /**  
  56.      * 按父ID查找菜单子项  
  57.      * @param integer $parentid   父菜单ID    
  58.      * @param integer $with_self  是否包括他自己  
  59.      */   
  60.     final public static function admin_menu($parentid$with_self = 0) {   
  61.         $parentid = intval($parentid);   
  62.         $menudb = pc_base::load_model('menu_model');   
  63.         $result =$menudb->select(array('parentid'=>$parentid,'display'=>1),'*',1000,'listorder ASC');   
  64.         if($with_self) {   
  65.             $result2[] = $menudb->get_one(array('id'=>$parentid));   
  66.             $result = array_merge($result2,$result);   
  67.         }   
  68.         //权限检查   
  69.         if($_SESSION['roleid'] == 1) return $result;   
  70.         $array = array();   
  71.         $privdb = pc_base::load_model('admin_role_priv_model');   
  72.         $siteid = param::get_cookie('siteid');   
  73.         foreach($result as $v) {   
  74.             $action = $v['a'];   
  75.             if(preg_match('/^public_/',$action)) {   
  76.                 $array[] = $v;   
  77.             } else {   
  78.                 if(preg_match('/^ajax_([a-z]+)_/',$action,$_match)) $action = $_match[1];   
  79.                 $r = $privdb->get_one(array('m'=>$v['m'],'c'=>$v['c'],'a'=>$action,'roleid'=>$_SESSION['roleid'],'siteid'=>$siteid));   
  80.                 if($r$array[] = $v;   
  81.             }   
  82.         }   
  83.         return $array;   
  84.     }   
  85.     /**  
  86.      * 获取菜单 头部菜单导航  
  87.      *   
  88.      * @param $parentid 菜单id  
  89.      */   
  90.     final public static function submenu($parentid = ''$big_menu = false) {   
  91.         if(emptyempty($parentid)) {   
  92.             $menudb = pc_base::load_model('menu_model');   
  93.             $r = $menudb->get_one(array('m'=>ROUTE_M,'c'=>ROUTE_C,'a'=>ROUTE_A));   
  94.             $parentid = $_GET['menuid'] = $r['id'];   
  95.         }   
  96.         $array = self::admin_menu($parentid,1);   
  97.            
  98.         $numbers = count($array);   
  99.         if($numbers==1 && !$big_menureturn '';   
  100.         $string = '';   
  101.         $pc_hash = $_SESSION['pc_hash'];   
  102.         foreach($array as $_value) {   
  103.             if (!isset($_GET['s'])) {   
  104.                 $classname = ROUTE_M == $_value['m'] && ROUTE_C == $_value['c'] && ROUTE_A == $_value['a'] ? 'class="on"' : '';   
  105.             } else {   
  106.                 $_s = !emptyempty($_value['data']) ? str_replace('='''strstr($_value['data'], '=')) : '';   
  107.                 $classname = ROUTE_M == $_value['m'] && ROUTE_C == $_value['c'] && ROUTE_A == $_value['a'] && $_GET['s'] == $_s ? 'class="on"' : '';   
  108.             }   
  109.             if($_value['parentid'] == 0 || $_value['m']==''continue;   
  110.             if($classname) {   
  111.                 $string .= "<a href='javascript:;' $classname><em>".L($_value['name'])."</em></a><span>|</span>";   
  112.             } else {   
  113.                 $string .= "<a href='?m=".$_value['m']."&c=".$_value['c']."&a=".$_value['a']."&menuid=$parentid&pc_hash=$pc_hash".'&'.$_value['data']."' $classname><em>".L($_value['name'])."</em></a><span>|</span>";   
  114.             }   
  115.         }   
  116.         $string = substr($string,0,-14);   
  117.         return $string;   
  118.     }   
  119.     /**  
  120.      * 当前位置  
  121.      *   
  122.      * @param $id 菜单id  
  123.      */   
  124.     final public static function current_pos($id) {   
  125.         $menudb = pc_base::load_model('menu_model');   
  126.         $r =$menudb->get_one(array('id'=>$id),'id,name,parentid');   
  127.         $str = '';   
  128.         if($r['parentid']) {   
  129.             $str = self::current_pos($r['parentid']);   
  130.         }   
  131.         return $str.L($r['name']).' > ';   
  132.     }   
  133.        
  134.     /**  
  135.      * 获取当前的站点ID  
  136.      */   
  137.     final public static function get_siteid() {   
  138.         return get_siteid();   
  139.     }   
  140.        
  141.     /**  
  142.      * 获取当前站点信息  
  143.      * @param integer $siteid 站点ID号,为空时取当前站点的信息  
  144.      * @return array  
  145.      */   
  146.     final public static function get_siteinfo($siteid = '') {   
  147.         if ($siteid == ''$siteid = self::get_siteid();   
  148.         if (emptyempty($siteid)) return false;   
  149.         $sites = pc_base::load_app_class('sites''admin');   
  150.         return $sites->get_by_id($siteid);   
  151.     }   
  152.        
  153.     final public static function return_siteid() {   
  154.         $sites = pc_base::load_app_class('sites''admin');   
  155.         $siteid = explode(',',$sites->get_role_siteid($_SESSION['roleid']));   
  156.         return current($siteid);   
  157.     }   
  158.     /**  
  159.      * 权限判断  
  160.      */   
  161.     final public function check_priv() {   
  162.         //登录界面:一旦返回true,将终止后续代码的执行   
  163.         if(ROUTE_M =='admin' && ROUTE_C =='index' && in_array(ROUTE_A, array('login''init''public_card'))) return true;   
  164.         //以后重要的权限控制在这里进行设置,如:content、create_html   
  165.         if(ROUTE_M =='content' && ROUTE_C =='create_html' && in_array(ROUTE_A, array('categorysub'))) return true;   
  166.         //roleid:1-超级管理员,一旦返回true,将终止后续代码的执行   
  167.         if($_SESSION['roleid'] == 1) return true;   
  168.         $siteid = param::get_cookie('siteid');//站点id   
  169.         $action = ROUTE_A;//方法   
  170.         $privdb = pc_base::load_model('admin_role_priv_model');   
  171.         if(preg_match('/^public_/',ROUTE_A)) return true;//以public开头的方法   
  172.         if(preg_match('/^ajax_([a-z]+)_/',ROUTE_A,$_match)) {//以ajax开头的方法   
  173.             $action = $_match[1];//匹配结果   
  174.         }   
  175.         $r =$privdb->get_one(array('m'=>ROUTE_M,'c'=>ROUTE_C,'a'=>$action,'roleid'=>$_SESSION['roleid'],'siteid'=>$siteid));   
  176.         if(!$r) showmessage('您没有权限操作该项','blank');//提示 没有权限操作该项   
  177.     }   
  178.    
  179.     /**  
  180.      *   
  181.      * 记录日志   
  182.      */   
  183.     final private function manage_log() {   
  184.         //判断是否记录   
  185.         $setconfig = pc_base::load_config('system');   
  186.         extract($setconfig);   
  187.         if($admin_log==1){//是否记录后台操作日志   
  188.             $action = ROUTE_A;//方法   
  189.             if($action == '' || strchr($action,'public') || $action == 'init' || $action=='public_current_pos') {   
  190.                 return false;//以上几种情况除外   
  191.             }else {   
  192.                 $ip = ip();//ip   
  193.                 $log = pc_base::load_model('log_model');//zp_log数据表   
  194.                 $username = param::get_cookie('admin_username');//用户名   
  195.                 $userid = isset($_SESSION['userid']) ? $_SESSION['userid'] : '';//用户id   
  196.                 $time = date('Y-m-d H-i-s',SYS_TIME);//系统时间   
  197.                 $url = '?m='.ROUTE_M.'&c='.ROUTE_C.'&a='.ROUTE_A;//操作地址   
  198.                 //记录操作日志入库   
  199.                 $log->insert(array('module'=>ROUTE_M,'username'=>$username,'userid'=>$userid,'action'=>ROUTE_C, 'querystring'=>$url,'time'=>$time,'ip'=>$ip));   
  200.             }   
  201.         }   
  202.     }   
  203.        
  204.     /**  
  205.      *   
  206.      * 后台IP禁止判断 ...  
  207.      */   
  208.     final private function check_ip(){   
  209.         $this->ipbanned = pc_base::load_model('ipbanned_model');   
  210.         $this->ipbanned->check_ip();   
  211.     }   
  212.     /**  
  213.      * 检查锁屏状态  
  214.      */   
  215.     final private function lock_screen() {   
  216.         if(isset($_SESSION['lock_screen']) && $_SESSION['lock_screen']==1) {   
  217.             if(preg_match('/^public_/', ROUTE_A) || (ROUTE_M == 'content' && ROUTE_C == 'create_html') || (ROUTE_M == 'release') || (ROUTE_A == 'login') || (ROUTE_M == 'search' && ROUTE_C == 'search_admin' && ROUTE_A=='createindex')) return true;   
  218.             showmessage(L('admin_login'),'?m=admin&c=index&a=login');  //开源代码phpfensi.com 
  219.         }   
  220.     }   
  221.    
  222.     /**  
  223.      * 检查hash值,验证用户数据安全性  
  224.      */   
  225.     final private function check_hash() {   
  226.         if(preg_match('/^public_/', ROUTE_A) || ROUTE_M =='admin' && ROUTE_C =='index' || in_array(ROUTE_A, array('login'))) {   
  227.             return true;   
  228.         }   
  229.         if(isset($_GET['pc_hash']) && $_SESSION['pc_hash'] != '' && ($_SESSION['pc_hash'] == $_GET['pc_hash'])) {   
  230.             return true;   
  231.         } elseif(isset($_POST['pc_hash']) && $_SESSION['pc_hash'] != '' && ($_SESSION['pc_hash'] == $_POST['pc_hash'])) {   
  232.             return true;   
  233.         } else {   
  234.             showmessage(L('hash_check_false'),HTTP_REFERER);   
  235.         }   
  236.     }   
  237.    
  238.     /**  
  239.      * 后台信息列表模板  
  240.      * @param string $id 被选中的模板名称  
  241.      * @param string $str form表单中的属性名  
  242.      */   
  243.     final public function admin_list_template($id = ''$str = '') {   
  244.         $templatedir = PC_PATH.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.'content'.DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR;   
  245.         $pre = 'content_list';   
  246.         $templates = glob($templatedir.$pre.'*.tpl.php');   
  247.         if(emptyempty($templates)) return false;   
  248.         $files = @array_map('basename'$templates);   
  249.         $templates = array();   
  250.         if(is_array($files)) {   
  251.             foreach($files as $file) {   
  252.                 $key = substr($file, 0, -8);   
  253.                 $templates[$key] = $file;   
  254.             }   
  255.         }   
  256.         ksort($templates);   
  257.         return form::select($templates$id$str,L('please_select'));   
  258.     }   
  259. }   
  260. ?>

Tags: phpcms文件 admin class php

分享到: