您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

phpcms的adminclassphp

2025/9/22 1:17:49发布14次查看
'mysql',将其改为//session配置'session_storage' => 'files',反正是不能为空,否则不会登录成功。  */
$session_storage = 'session_'.pc_base::load_config('system','session_storage');//session存储方式存到文件
pc_base::load_sys_class($session_storage);  
if(param::get_cookie('sys_lang')) { //语言包
    define('sys_style',param::get_cookie('sys_lang')); //在登陆的时候被设置
} else {
    define('sys_style','zh-cn');
}
//定义在后台
define('in_admin',true);
class admin {
    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();   //hash安全验证
        if(pc_base::load_config('system','admin_url') && $_server[http_host]!= pc_base::load_config('system','admin_url')) {
            header(http/1.1 403 forbidden);    //设置无权访问
            exit('no permission resources.');
        }
    }
/**
     * 判断用户是否已经登陆
     */
     final public function check_admin() {
        //如果在登录界面
        //route_m获取模型,route_c获取控制器,route_a获取事件
        if(route_m =='admin' && route_c =='index' && in_array(route_a, array('login', 'public_card'))) {      
            return true;//一旦返回true,将终止后续代码的执行
        } else {
            //判断session是否有userid,roleid,如果有的话不做处理,没有的话返回登陆界面
            $userid = param::get_cookie('userid');
            if(!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 模型名
     */
      final public static function admin_tpl($file, $m = '') {
        $m = empty($m) ? route_m : $m;    
        if(empty($m)) return false;   //判断$m为空返回false
        return pc_path.'modules'.directory_separator.$m.directory_separator.'templates'.directory_separator.$file.'.tpl.php'; //返回modules/route_m/templates/  后缀为$file.tpl.php
    }
/**
     * 获取管理菜单
     * 按父id查找菜单子项
     * @param integer $parentid   父菜单id  
     * @param integer $with_self  是否包括他自己
     * @param 菜单是存储在menu数据表中的。当我们二次开发需要新增菜单时候,只需要在menu表中插入相应menu的id、name、parentid、m、c、a、data等信息即可。当然为了让除了超级管理员之外的角色可以访问该menu,还需要在admin_role_priv表中配置权限。
     */
     final public static function admin_menu($parentid, $with_self = 0) {
        $parentid = intval($parentid);    //获取变量的整数值,默认是十进制
        $menudb = pc_base::load_model('menu_model');  //引用model子类,实现数据库等操作
        $site_model = param::get_cookie('site_model');        //model子类
        $where = array('parentid'=>$parentid,'display'=>1);  //parentid父节点id
        if ($site_model && $parentid) {   
            $where[$site_model] = 1;
         }
         //获取其全部的子菜单
        $result =$menudb->select($where,'*',1000,'listorder asc');    //listorder就是后台中排序前那个号来排序,可以进行编辑
        if($with_self) {  
            $result2[] = $menudb->get_one(array('id'=>$parentid));
            $result = array_merge($result2,$result); //array_merge — 将数组的值赋给上一个数组
        }
        //权限检查。如果是超级管理员,则全部返回
         if($_session['roleid'] == 1) return $result;  //将角色id存入session
         //找出有权限的部分(根据admin_role_priv_model表)
        $array = array();
        $privdb = pc_base::load_model('admin_role_priv_model');   //调用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];   
                //尝试获取当前角色$roleid是否有对应的m、c、a的操作权限记录//尝试获取当前角色$roleid是否有对应的m、c、a的操作权限记录
                $r = $privdb->get_one(array('m'=>$v['m'],'c'=>$v['c'],'a'=>$action,'roleid'=>$_session['roleid'],'siteid'=>$siteid));
                if($r) $array[] = $v;   //判断$r。。将$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'); //引用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);   //父菜单$parentid中的名字,包括父菜单
$numbers = count($array);     //计算数组中的单元数目或对象中的属性个数
        if($numbers==1 && !$big_menu) 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' : '';
            } else {
                $_s = !empty($_value['data']) ? str_replace('=', '', strstr($_value['data'], '=')) : '';
                $classname = route_m == $_value['m'] && route_c == $_value['c'] && route_a == $_value['a'] && $_get['s'] == $_s ? 'class=on' : '';
            }
            if($_value['parentid'] == 0 || $_value['m']=='') continue;
            if($classname) {
                $string .= .l($_value['name']).|;
            } else {
                $string .= .l($_value['name']).|;
            }
        }
        $string = substr($string,0,-14);
        return $string;
    }  
    /**
     * 当前位置
     *
     * @param $id 菜单id
     */
    //利用递归,获取某一个menu的所有父菜单层级,作为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']);
        }
        return $str.l($r['name']).' > ';
    }
/**
     * 获取当前的站点id
     */
      final public static function get_siteid() {
        return get_siteid();
    }
/**
     *
     * 获取当前站点信息
     * @param integer $siteid 站点id号,为空时取当前站点的信息
     * @return array
     *  登录时获取网站界面
     */
    final public static function 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);
    }
    final public static function return_siteid() {
        $sites = pc_base::load_app_class('sites', 'admin');
        $siteid = explode(',',$sites->get_role_siteid($_session['roleid']));
        return current($siteid);
    }
    /**
     * 权限判断
     */
    //检查用户是否正在访问m、c、a、的操作权限
    final public function check_priv() {
        //登录界面:一旦返回true,将终止后续代码的执行   
        if(route_m =='admin' && route_c =='index' && in_array(route_a, array('login', 'init', 'public_card'))) return true;
//roleid:1 超级管理员,一旦返回true,将终止后面代码的执行
        if($_session['roleid'] == 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_开头的方法,则只截取后半部分作为查询条件
            $action = $_match[1];    //匹配结果
        }
        //尝试获取有无m、a、roleid siteid都复合的权限记录
        $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 manage_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') {
                return false;   //以上几种方法除外
            }else {
                $ip = ip();
                $log = pc_base::load_model('log_model');//数据表
                $username = param::get_cookie('admin_username');//用户名
                $userid = isset($_session['userid']) ? $_session['userid'] : '';//用户id
                $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));   //记录操作日志入库
            }
          }
    }
/**
     *
     * 后台ip禁止判断 ...
     */
     final private function check_ip(){
        $this->ipbanned = pc_base::load_model('ipbanned_model');
        $this->ipbanned->check_ip();
     }
     /**
      * 检查锁屏状态
      */
     final private function lock_screen() {
        if(isset($_session['lock_screen']) && $_session['lock_screen']==1) {
            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;
            showmessage(l('admin_login'),'?m=admin&c=index&a=login');
        }
    }
    /**
      * 检查hash值,验证用户数据安全性
      */
     final private function check_hash() {
         //如果是公有方法、管理首页、登陆界面等不需要hash认证的,予以放行
        if(preg_match('/^public_/', route_a) || route_m =='admin' && route_c =='index' || in_array(route_a, array('login'))) {    
            return true;
        }
        //不管是get还是post来的pc_hash,如果能和服务端pc_hash对应的上,则pass
        if(isset($_get['pc_hash']) && $_session['pc_hash'] != '' && ($_session['pc_hash'] == $_get['pc_hash'])) {
            return true;
        } elseif(isset($_post['pc_hash']) && $_session['pc_hash'] != '' && ($_session['pc_hash'] == $_post['pc_hash'])) {
            return true;
        } else {
            showmessage(l('hash_check_false'),http_referer);
        }
    }
/**
     * 后台信息列表模板
     * @param string $id 被选中的模板名称
     * @param string $str form表单中的属性名
     */

final public function admin_list_template($id = '', $str = '') {
        $templatedir = pc_path.directory_separator.'modules'.directory_separator.'content'.directory_separator.'templates'.directory_separator;
        $pre = 'content_list';
        $templates = glob($templatedir.$pre.'*.tpl.php');
        if(empty($templates)) return false;
        $files = @array_map('basename', $templates);
        $templates = array();  
        if(is_array($files)) {
            foreach($files as $file) {
                $key = substr($file, 0, -8);
                $templates[$key] = $file;
            }
        }
        ksort($templates);
        return form::select($templates, $id, $str,l('please_select'));
    }
}
以上就介绍了phpcms的adminclassphp,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product