admin_info = $this->systemLogin(); if ($this->admin_info['id'] != 1){ // 验证权限 $this->checkPermission(); } //转码 防止GBK下用ajax调用时传汉字数据出现乱码 if (($_GET['branch']!='' || $_GET['op']=='ajax') && strtoupper(CHARSET) == 'GBK'){ $_GET = Language::getGBK($_GET); } } /** * 取得当前管理员信息 * * @param * @return 数组类型的返回结果 */ protected final function getAdminInfo(){ return $this->admin_info; } /** * 系统后台登录验证 * * @param * @return array 数组类型的返回结果 */ protected final function systemLogin(){ //取得cookie内容,解密,和系统匹配 $user = unserialize(decrypt(cookie('sys_key'),MD5_KEY)); if (!key_exists('gid',(array)$user) || !isset($user['sp']) || (empty($user['name']) || empty($user['id']))){ @header('Location: index.php?act=login&op=login');exit; }else { $this->systemSetKey($user); } return $user; } /** * 系统后台 会员登录后 将会员验证内容写入对应cookie中 * * @param string $name 用户名 * @param int $id 用户ID * @return bool 布尔类型的返回结果 */ protected final function systemSetKey($user){ setNcCookie('sys_key',encrypt(serialize($user),MD5_KEY),3600,'',null); } /** * 验证当前管理员权限是否可以进行操作 * * @param string $link_nav * @return */ protected final function checkPermission($link_nav = null){ if ($this->admin_info['sp'] == 1) return true; $act = $_GET['act']?$_GET['act']:$_POST['act']; $op = $_GET['op']?$_GET['op']:$_POST['op']; if (empty($this->permission)){ $gadmin = Model('gadmin')->getby_gid($this->admin_info['gid']); $permission = decrypt($gadmin['limits'],MD5_KEY.md5($gadmin['gname'])); $this->permission = $permission = explode('|',$permission); }else{ $permission = $this->permission; } //显示隐藏小导航,成功与否都直接返回 if (is_array($link_nav)){ if (!in_array("{$link_nav['act']}.{$link_nav['op']}",$permission) && !in_array($link_nav['act'],$permission)){ return false; }else{ return true; } } //以下几项不需要验证 $tmp = array('index','dashboard','login','common','cms_base'); if (in_array($act,$tmp)) return true; if (in_array($act,$permission) || in_array("$act.$op",$permission)){ return true; }else{ $extlimit = array('ajax','export_step1'); if (in_array($op,$extlimit) && (in_array($act,$permission) || strpos(serialize($permission),'"'.$act.'.'))){ return true; } //带前缀的都通过 foreach ($permission as $v) { if (!empty($v) && strpos("$act.$op",$v.'_') !== false) { return true;break; } } } showMessage(Language::get('nc_assign_right'),'','html','succ',0); } /** * 取得后台菜单 * * @param string $permission * @return */ protected final function getNav($permission = '',&$top_nav,&$left_nav,&$map_nav){ $act = $_GET['act']?$_GET['act']:$_POST['act']; $op = $_GET['op']?$_GET['op']:$_POST['op']; if ($this->admin_info['sp'] != 1 && empty($this->permission)){ $gadmin = Model('gadmin')->getby_gid($this->admin_info['gid']); $permission = decrypt($gadmin['limits'],MD5_KEY.md5($gadmin['gname'])); $this->permission = $permission = explode('|',$permission); } Language::read('common'); $lang = Language::getLangContent(); $array = require(BASE_PATH.'/include/menu.php'); $array = $this->parseMenu($array); //管理地图 $map_nav = $array['left']; unset($map_nav[0]); $model_nav = "
  • _text_
  • \n"; $top_nav = ''; //顶部菜单 foreach ($array['top'] as $k=>$v) { $v['nav'] = $v['args']; $top_nav .= str_ireplace(array('_args_','_text_','_nav_'),$v,$model_nav); } $top_nav = str_ireplace("\n
    1. list_body
  • \n"; $left_nav = ''; foreach ($array['left'] as $k=>$v) { $left_nav .= str_ireplace(array('_nav_'),array($v['nav']),$model_nav); $model_list = "
  • _text_
  • "; $tmp_list = ''; $current_parent = '';//当前父级key foreach ($v['list'] as $key=>$value) { $model_list_parent = ''; $args = explode(',',$value['args']); if (!empty($value['parent'])){ if (empty($current_parent) || $current_parent != $value['parent']){ $model_list_parent = "
  • {$value['parenttext']}
  • "; } $current_parent = $value['parent']; } $value['op'] = $args[0]; $value['act'] = $args[1]; //$tmp_list .= str_ireplace(array('_args_','_text_','_op_'),$value,$model_list); $tmp_list .= str_ireplace(['_args_','_text_','_opact_','_pkey_'], [$value['args'],$value['text'],$value['op'],$value['act'],$value['parent']], $model_list_parent.$model_list); } $left_nav = str_replace('list_body',$tmp_list,$left_nav); } } /** * 过滤掉无权查看的菜单 * * @param array $menu * @return array */ private final function parseMenu($menu = array()){ if ($this->admin_info['sp'] == 1) return $menu; foreach ($menu['left'] as $k=>$v) { foreach ($v['list'] as $xk=>$xv) { $tmp = explode(',',$xv['args']); //以下几项不需要验证 $except = array('index','dashboard','login','common'); if (in_array($tmp[1],$except)) continue; if (!in_array($tmp[1],$this->permission) && !in_array($tmp[1].'.'.$tmp[0],$this->permission)){ unset($menu['left'][$k]['list'][$xk]); } } if (empty($menu['left'][$k]['list'])) { unset($menu['top'][$k]);unset($menu['left'][$k]); } } return $menu; } /** * 取得顶部小导航 * * @param array $links * @param 当前页 $actived */ protected final function sublink($links = array(), $actived = '', $file='index.php'){ $linkstr = ''; foreach ($links as $k=>$v) { parse_str($v['url'],$array); if (!$this->checkPermission($array)) continue; $href = ($array['op'] == $actived ? null : "href=\"{$file}?{$v['url']}\""); $class = ($array['op'] == $actived ? "class=\"current\"" : null); $lang = L($v['lang']); $linkstr .= sprintf('
  • %s
  • ',$href,$class,$lang); } return ""; } /** * 记录系统日志 * * @param $lang 日志语言包 * @param $state 1成功0失败null不出现成功失败提示 * @param $admin_name * @param $admin_id */ protected final function log($lang = '', $state = 1, $admin_name = '', $admin_id = 0){ if (!C('sys_log') || !is_string($lang)) return; if ($admin_name == ''){ $admin = unserialize(decrypt(cookie('sys_key'),MD5_KEY)); $admin_name = $admin['name']; $admin_id = $admin['id']; } $data = array(); if (is_null($state)){ $state = null; }else{ // $state = $state ? L('nc_succ') : L('nc_fail'); $state = $state ? '' : L('nc_fail'); } $data['content'] = $lang.$state; $data['admin_name'] = $admin_name; $data['createtime'] = time(); $data['admin_id'] = $admin_id; $data['ip'] = getIp(); $data['url'] = $_REQUEST['act'].'&'.$_REQUEST['op']; return Model('admin_log')->insert($data); } /** * 添加到任务队列 * * @param array $goods_array * @param boolean $ifdel 是否删除以原记录 */ protected function addcron($data = array(), $ifdel = false) { $model_cron = Model('cron'); if (isset($data[0])) { // 批量插入 $where = array(); foreach ($data as $k => $v) { if (isset($v['content'])) { $data[$k]['content'] = serialize($v['content']); } // 删除原纪录条件 if ($ifdel) { $where[] = '(type = ' . $data['type'] . ' and exeid = ' . $data['exeid'] . ')'; } } // 删除原纪录 if ($ifdel) { $model_cron->delCron(implode(',', $where)); } $model_cron->addCronAll($data); } else { // 单条插入 if (isset($data['content'])) { $data['content'] = serialize($data['content']); } // 删除原纪录 if ($ifdel) { $model_cron->delCron(array('type' => $data['type'], 'exeid' => $data['exeid'])); } $model_cron->addCron($data); } } }