admin['roleid'])) { return true; } elseif ($this->uid == $uid) { // 自己不验证 return true; } elseif (\Phpcmf\Service::M()->table('admin_role_index')->where('uid', $uid)->counts()) { // 此账号属于管理账号,禁止操作 return false; } elseif ($this->is_post_user() && $uid != $this->uid) { // 投稿者账号,不能操作其他人的 return false; } return true; } // 编辑时的获取自定义面板 public function edit_main_table($table, $name, $tid = 12) { $html = '
'.$name.'
'.dr_lang('拖动到任意灰色虚线框中').'
'; return $html; } // 获取自定义面板 public function get_main_table($table) { if (strpos($table, '-') !== false) { list($app, $name) = explode('-', $table); $file = dr_get_app_dir($app).'Views/main/'.$name.'.html'; } else { if (is_file(MYPATH.'View/main/'.$table.'.html')) { $file = MYPATH.'View/main/'.$table.'.html'; } else { $file = COREPATH.'View/main/'.$table.'.html'; } } if (is_file($file)) { return $file; } CI_DEBUG && log_message('debug', '自定义面板['.$table.']文件'.$file.'不存在'); return COREPATH.'View/main/none.html'; } // 判断当前站点权限 有权限1 无权限0 public function _check_site($siteid) { if (!\Phpcmf\Service::C()->admin) { return 0; } elseif (isset(\Phpcmf\Service::C()->admin['role'][1])) { return 1; // 超级管理员 } elseif (dr_in_array($siteid, \Phpcmf\Service::C()->admin['site'])) { return 1; } return 0; } // 获取当前管理员的角色组id protected function _role($uid) { $role = $this->db->table('admin_role_index')->where('uid', $uid)->get()->getResultArray(); if (!$role) { return []; } $id = []; foreach ($role as $t) { $id[] = $t['roleid']; } return $id; } // 存储授权登录信息 public function save_login_auth($name, $uid) { \Phpcmf\Service::L('cache')->set_data('admin_auth_login_'.$name.'_'.$uid, SYS_TIME, 300); } // 登陆账号密码验证 public function login_password($username, $password) { $data = $this->db ->table('member') ->where('username', $username) ->limit(1) ->get() ->getRowArray(); $password = dr_safe_password($password); // 判断用户状态 if (!$data) { return dr_return_data(0, IS_DEV ? dr_lang('账号[%s]不存在', $username) : dr_lang('登录失败'), 1); } elseif (!$password) { return dr_return_data(0, IS_DEV ? dr_lang('密码不能为空') : dr_lang('登录失败'), 2); } if (IS_API_HTTP && md5(md5($password).$data['salt'].md5($password)) == $data['password']) { $password = md5($password); } if (!IS_API_HTTP && defined('SYS_ADMIN_LOGIN_AES') && SYS_ADMIN_LOGIN_AES) { if (!function_exists('openssl_decrypt')) { log_message('error', '由于服务器环境没有启用openssl_decrypt,因此后台登录密码加密验证不被启用'); return dr_return_data(0, dr_lang('服务器环境不支持加密传输')); } else { $old = $password; $password = openssl_decrypt( $password, 'AES-128-CBC', substr(md5(SYS_KEY), 0, 16), 0, substr(md5(SYS_KEY), 10, 16) ); if (!$password) { return dr_return_data(0, IS_DEV ? dr_lang('密码[%s]解析失败', $old).openssl_error_string() : dr_lang('密码解析失败')); } } if (md5(md5($password).$data['salt'].md5($password)) != $data['password']) { return dr_return_data(0, IS_DEV ? dr_lang('密码[%s]不正确', $password) : dr_lang('登录失败'), 3); } } else if (md5($password.$data['salt'].$password) != $data['password']) { return dr_return_data(0, IS_DEV ? dr_lang('密码不正确') : dr_lang('登录失败'), 3); } return dr_return_data(1, 'login', $data); } // 登陆成功后储存会话 public function login_after($data) { if (!$data || !is_array($data)) { return dr_return_data(0, dr_lang('储存数据不存在'), 4); } $data['uid'] = $uid = (int)$data['id']; // 查询角色组 $data['role'] = $role = $this->_role($uid); // 挂钩点 非创始人验证登录权限 $rt = \Phpcmf\Hooks::trigger_callback('sites_admin_login_auth', $data); if ($rt && isset($rt['code'])) { if (!$rt['code']) { return dr_return_data(0, $rt['msg'], 4); } } elseif (!$role) { return dr_return_data(0, IS_DEV ? dr_lang('此账号不是管理员') : dr_lang('登录失败'), 4); } // 保存会话 $this->login_session($data); // 登录后的钩子 \Phpcmf\Hooks::trigger('admin_login_after', $data); // API认证字符串 $data['auth'] = md5($data['password'].$data['salt']); return dr_return_data($uid, 'login', $data); } // 后台管理员登录 public function login($username, $password) { $rs = $this->login_password($username, $password); if (!$rs['code']) { return $rs; } return $this->login_after($rs['data']); } // 存储会话 public function login_session($data) { // 保存会话 \Phpcmf\Service::C()->session()->set('uid', $data['id']); \Phpcmf\Service::L('input')->set_cookie('member_uid', $data['id'], SITE_LOGIN_TIME); \Phpcmf\Service::L('input')->set_cookie('member_cookie', md5(SYS_KEY.$data['password'].(isset($data['login_attr']) ? $data['login_attr'] : '')), SITE_LOGIN_TIME); // 管理员登录日志记录 $this->_login_log($data['id']); } // 或后天最近两次登录信息 public function admin_login_ip() { $query = $this->db->table('admin_login')->where('uid', $this->uid)->orderBy('logintime desc') ->limit(2)->get(); return $query ? $query->getResultArray() : []; } // 提醒我的消息 public function admin_notice($num = 7, $zt = false) { $db = $this->db->table('admin_notice'); if ($zt) { $db->where('status <>', 3); } else { $db->whereNotIn('status', [1, 3]); } $db->groupStart() ->where('site', SITE_ID) ->orWhere('site', 0) ->groupEnd(); if (dr_in_array(1, \Phpcmf\Service::C()->admin['roleid'])) { // 超管:不过滤接收人 } elseif ($this->is_post_user()) { // 投稿者 $db->groupStart() ->where(\Phpcmf\Service::M()->where_find_in_set($this->db->escapeIdentifiers('to_uid'), (int) $this->uid), null, false) ->orWhere('to_uid', (string) $this->uid) ->groupEnd(); } else { $db->groupStart(); $db->where(\Phpcmf\Service::M()->where_find_in_set($this->db->escapeIdentifiers('to_uid'), (int) $this->uid), null, false); foreach (\Phpcmf\Service::C()->admin['roleid'] as $r) { $db->orWhere(\Phpcmf\Service::M()->where_find_in_set($this->db->escapeIdentifiers('to_rid'), (int) $r), null, false); } $db->orGroupStart() ->where('to_uid', '0') ->where('to_rid', '0') ->groupEnd(); $db->groupEnd(); } $query = $db->orderBy('status', 'ASC') ->orderBy('inputtime', 'DESC') ->limit((int) $num) ->get(); return $query ? $query->getResultArray() : []; } /** * 系统提醒 * * @param site 站点id,公共部分0 * @param type system系统 content内容相关 member会员相关 app应用相关 pay 交易相关 * @param msg 提醒内容 * @param uri 后台对应的链接 * @param to 通知对象 留空表示全部对象 * array( * to_uid 指定人 * to_rid 指定角色组 * ) */ public function notice($site, $type, $member, $msg, $uri, $to = []) { if (!$to || !is_array($to)) { $to = [ 'to_rid' => 0, 'to_uid' => 0, ]; } $data = [ 'site' => (int)$site, 'type' => $type, 'msg' => dr_strcut(dr_clearhtml($msg), 100), 'uri' => $uri, 'to_rid' => $this->_get_to_array($to['to_rid']), 'to_uid' => $this->_get_to_array($to['to_uid']), 'status' => 0, 'uid' => (int)$member['id'], 'username' => $member['username'] ? $member['username'] : '', 'op_uid' => 0, 'op_username' => '', 'updatetime' => 0, 'inputtime' => SYS_TIME, ]; $this->db->table('admin_notice')->insert($data); // 挂钩点 \Phpcmf\Hooks::trigger('admin_notice', $data); } // 对入库格式化 private function _get_to_array($to) { if (!$to) { return 0; } elseif (is_array($to)) { $rt = ''; foreach ($to as $t) { if ($t) { $rt.= ','.$t; } } return trim($rt, ','); } return (string)$to; } // 执行提醒 public function todo_notice($uri, $site = 0) { $this->db->table('admin_notice')->where('site', (int)$site)->where('uri', $uri)->update([ 'status' => 3, 'updatetime' => SYS_TIME, ]); } // 执行删除提醒 public function delete_notice($uri, $site = 0) { $this->db->table('admin_notice')->where('site', (int)$site)->where('uri', $uri)->delete(); } /** * 登录记录 */ protected function _login_log($uid) { if (!$uid) { return; } $this->db->table('admin_login')->insert([ 'uid' => $uid, 'loginip' => (string)\Phpcmf\Service::L('input')->ip_address(), 'logintime' => SYS_TIME, 'useragent' => substr(\Phpcmf\Service::L('input')->get_user_agent(), 0, 255), ]); } /** * 管理员用户信息 * * @param arr $member 用户信息 * @param int $verify 是否验证该管理员权限 */ public function member($member, $verify = 0) { // 查询用户信息 $uid = (int)$member['uid']; $data = $this->db->table('admin')->where('uid', $uid)->get()->getRowArray(); if (!$data) { // 挂钩点 $rt = \Phpcmf\Hooks::trigger_callback('sites_admin_login_check', $member, $verify); if ($rt && isset($rt['code'])) { if (!$rt['code']) { // 注销账号 \Phpcmf\Service::C()->session()->remove('uid'); \Phpcmf\Service::C()->session()->remove('admin'); \Phpcmf\Service::C()->session()->remove('siteid'); return dr_return_data(0, $rt['msg']); } $data = $rt['msg']; } else { // 注销账号 \Phpcmf\Service::C()->session()->remove('uid'); \Phpcmf\Service::C()->session()->remove('admin'); \Phpcmf\Service::C()->session()->remove('siteid'); return dr_return_data(0, dr_lang('管理员账号不存在')); } } else { // 查询角色组 $role_id = $this->_role($uid); if (!$role_id) { // 注销账号 \Phpcmf\Service::C()->session()->remove('uid'); \Phpcmf\Service::C()->session()->remove('admin'); \Phpcmf\Service::C()->session()->remove('siteid'); return dr_return_data(0, dr_lang('此账号不是管理员组成员')); } // 角色权限缓存 $role = \Phpcmf\Service::C()->get_cache('auth'); // 角色信息 $data['role'] = $data['roleid'] = $data['site'] = $data['module'] = []; $data['system'] = [ 'uri' => [], 'mark' => []]; // 把多个管理员权限合并到一起 foreach ($role_id as $i) { $data['role'][$i] = $role[$i]['name'] ? $role[$i]['name'] : []; $data['roleid'][$i] = $i; $data['site'] = dr_array2array($data['site'], $role[$i]['site']); $data['module'] = dr_array2array($data['module'], $role[$i]['module']); $data['system']['uri'] = dr_array2array($data['system']['uri'], $role[$i]['system']['uri']); $data['system']['mark'] = dr_array2array($data['system']['mark'], $role[$i]['system']['mark']); } $data['adminid'] = $data['roleid'][1] ? 1 : 9; if ($member['is_admin'] != $data['adminid']) { $this->db->table('member_data')->where('id', $member['id'])->update([ 'is_admin' => $data['adminid'] ]); } $data['uid'] = $uid; $data['email'] = $member['email']; $data['phone'] = $member['phone']; $data['username'] = $member['username']; $data['password'] = $member['password']; $data['history'] = dr_string2array($data['history']); $data['setting'] = dr_string2array($data['setting']); $data['usermenu'] = dr_string2array($data['usermenu']); $rt = \Phpcmf\Hooks::trigger_callback('admin_login_check', $data, $verify); if ($rt && isset($rt['code']) && !$rt['code']) { \Phpcmf\Service::C()->session()->remove('uid'); \Phpcmf\Service::C()->session()->remove('admin'); \Phpcmf\Service::C()->session()->remove('siteid'); return dr_return_data(0, $rt['msg']); } } if ($member['is_lock'] && !IS_DEV) { // 注销账号 \Phpcmf\Service::C()->session()->remove('uid'); \Phpcmf\Service::C()->session()->remove('admin'); \Phpcmf\Service::C()->session()->remove('siteid'); return dr_return_data(0, dr_lang('账号被锁定,禁止登陆')); } return dr_return_data(1, '', $data); } // 更新当前的角色账号设置 public function update_admin_setting($name, $value) { $setting = \Phpcmf\Service::C()->admin['setting']; $setting[$name] = $value; $this->table('admin')->update(\Phpcmf\Service::C()->admin['id'], [ 'setting' => dr_array2string($setting) ]); } // 判断当前账号站点权限 public function check_site() { if (!\Phpcmf\Service::C()->admin) { return 0; } elseif (dr_in_array(1, \Phpcmf\Service::C()->admin['site'])) { return 1; // 超级权限识别 } elseif (dr_in_array(SITE_ID, \Phpcmf\Service::C()->admin['site'])) { return 1; // 当前站点权限 } return 0; } // 获取角色组 public function get_role_all($rid = []) { $role = []; $table = $this->table('admin_role'); if ($rid) { $table->where_in('id', $rid); } $data = $table->order_by('id ASC')->getAll(); if ($data) { foreach ($data as $t) { $t['site'] = dr_string2array($t['site']); $t['system'] = dr_string2array($t['system']); $t['module'] = dr_string2array($t['module']); $t['application'] = dr_string2array($t['application']); $role[$t['id']] = $t; } } return $role; } // 添加角色组 public function add_role($data) { return $this->table('admin_role')->insert([ 'site' => dr_array2string([1]), 'name' => $data['name'], 'system' => '', 'module' => '', 'application' => dr_array2string($data['application']), ]); } public function get_role($id) { $t = $this->table('admin_role')->get($id); if (!$t) { return null; } $t['site'] = dr_string2array($t['site']); $t['system'] = dr_string2array($t['system']); $t['module'] = dr_string2array($t['module']); $t['application'] = dr_string2array($t['application']); return $t; } public function update_role($id, $data) { $data['application'] = dr_array2string($data['application']); $this->table('admin_role')->update($id, $data); } public function delete_role($ids) { $ids && $this->db->table('admin_role')->whereIn('id', $ids)->delete(); } // 账号是否强制了简化模式 public function is_admin_min_mode() { if (defined('IS_ADMIN_MIN') && IS_ADMIN_MIN) { return 1; // 强制简化模式 } if ($this->_is_admin_min_mode >= 0) { return $this->_is_admin_min_mode; } if (dr_in_array(1, \Phpcmf\Service::C()->admin['roleid'])) { $this->_is_admin_min_mode = 0; } else { $auth = \Phpcmf\Service::C()->get_cache('auth'); $this->_is_admin_min_mode = 0; foreach (\Phpcmf\Service::C()->admin['roleid'] as $aid) { if (isset($auth[$aid]['application']['mode']) && $auth[$aid]['application']['mode']) { $this->_is_admin_min_mode = 1; } } } return $this->_is_admin_min_mode; } // 账号是否是投稿员 public function is_post_user() { if ($this->_is_post_user >= 0) { return $this->_is_post_user; } if (dr_in_array(1, \Phpcmf\Service::C()->admin['roleid'])) { $this->_is_post_user = 0; return $this->_is_post_user; } if (isset(\Phpcmf\Service::C()->admin['is_post_user']) && \Phpcmf\Service::C()->admin['is_post_user']) { $this->_is_post_user = 1; return $this->_is_post_user; } $auth = \Phpcmf\Service::C()->get_cache('auth'); foreach (\Phpcmf\Service::C()->admin['roleid'] as $aid) { if (isset($auth[$aid]['application']['tid']) && $auth[$aid]['application']['tid']) { $this->_is_post_user = 1; return $this->_is_post_user; } } $this->_is_post_user = 0; return $this->_is_post_user; } // 投稿员是否审核 public function is_post_user_status() { if ($this->_is_post_user_status >= 0) { return $this->_is_post_user_status; } if (dr_in_array(1, \Phpcmf\Service::C()->admin['roleid'])) { return 0; } $auth = \Phpcmf\Service::C()->get_cache('auth'); foreach (\Phpcmf\Service::C()->admin['roleid'] as $aid) { if (isset($auth[$aid]['application']['tid']) && $auth[$aid]['application']['tid']) { if (isset($auth[$aid]['application']['verify']) && $auth[$aid]['application']['verify']) { $this->_is_post_user_status = $auth[$aid]['application']['verify']; return $this->_is_post_user_status; } $this->_is_post_user_status = 0; return 0; } } $this->_is_post_user_status = 0; return 0; } // 后台内容审核权限编辑时的验证 public function get_admin_verify_status_edit($vid, $status) { } // 后台内容审核列表的权限的sql语句 public function get_admin_verify_status_list() { } /** * 后台登录判断 * * @return void */ public function is_admin_login($member) { if (IS_ADMIN && \Phpcmf\Service::L('router')->class === 'login') { return FALSE; // 登录界面判断 } $uid = (int)\Phpcmf\Service::C()->session()->get('uid'); if (!$member || $uid != $member['uid']) { // 登录超时 if (\Phpcmf\Service::L('router')->class == 'api') { if (in_array(\Phpcmf\Service::L('router')->method, ['oauth', 'search_help', 'login'])) { return FALSE; // 跳过的控制器 } elseif (\Phpcmf\Service::L('router')->method == 'my') { dr_redirect(ADMIN_URL . \Phpcmf\Service::L('router')->url('login/index', array('go' => urlencode(dr_now_url())))); } \Phpcmf\Service::C()->_admin_msg(0, dr_lang('登录失效')); } elseif (\Phpcmf\Service::L('router')->class == 'cloud' && \Phpcmf\Service::L('router')->method == 'down_file') { // 云下载文件权限 return [ 'roleid' => [1], 'system' => [ 'uri' => [ 'cloud/down_file', 'cloud/index' ], ] ]; //dr_redirect(ADMIN_URL . \Phpcmf\Service::L('router')->url('login/index', array('is_cloud' => 1, 'go' => urlencode(dr_now_url())))); } dr_redirect(ADMIN_URL . \Phpcmf\Service::L('router')->url('login/index', array('go' => urlencode(dr_now_url())))); return FALSE; } $rt = $this->member($member, 1); if (!$rt['code']) { \Phpcmf\Service::C()->_admin_msg(0, $rt['msg']); } return $rt['data']; } /** * 判断是否具有操作权限 * * @param string $uri * @param bool $is_index 是否后台首页 * @return bool 有权限返回TRUE,否则返回FALSE */ public function _is_admin_auth($uri = '', $is_index = 0) { $uri = trim((string)$uri, '/'); // 管理员1组不验证, 后台首页不验证 if ((!\Phpcmf\Service::C()->admin || isset(\Phpcmf\Service::C()->admin['role'][1])) || \Phpcmf\Service::L('router')->class == 'api' || in_array($uri, [ 'home/index', 'home/main', 'home/home', 'home/min', ])) { return true; } elseif (!$uri) { return false; } // 当uri不全时 if (substr_count(trim($uri, '/'), '/') < 2) { // 补全控制器 $uri = strpos($uri, '/') !== false ? $uri : (\Phpcmf\Service::L('router')->class.'/'.$uri); // 补全项目目录 APP_DIR && substr_count(trim($uri, '/'), '/') == 1 && $uri = APP_DIR.'/'.$uri; } // 分隔URI判断权限 $uri_arr = explode('/', $uri); $method = end($uri_arr); if (!$method) { return false; } // 找到下划线的控制器 $action = strpos($method, '_') !== false ? str_replace('_', '', trim(strtolower(strrchr($method, '_')), '_')) : $method; // _api控制器不进行权限验证 if ($action == 'api') { return true; } elseif (in_array($action, ['add', 'edit', 'del'])) { // 添加、修改、删除控制器不进行权限验证 } else { $action = 'index'; // 其他控制器解析为index表示查看 } // 查看的index URI $uri_arr[dr_count($uri_arr) - 1] = $action; $this_uri = implode('/', $uri_arr); if (dr_in_array($this_uri, \Phpcmf\Service::C()->admin['system']['uri'])) { return true; } elseif (dr_in_array($this_uri, \Phpcmf\Service::C()->admin['system']['mark'])) { return true; } // 取当前uri中的名称 $arr = explode('/', $this_uri); switch (dr_count($arr)) { case 1: $this_c = \Phpcmf\Service::L('router')->class; break; case 2: $this_c = $arr[0]; break; case 3: $this_c = $arr[1]; break; default: $this_c = \Phpcmf\Service::L('router')->class; break; } // 特殊url权限验证 if (APP_DIR && $this_c == 'flag') { // 特殊推荐位权限 $this_uri = str_replace('/flag/', '/home/', $this_uri); } elseif ($this_c == 'module_category') { // 栏目权限 $this_uri = 'category/'.$action; } // 特殊url权限验证 if (dr_in_array($this_uri, \Phpcmf\Service::C()->admin['system']['uri'])) { return true; } // 验证应用插件的权限 if (!$is_index && substr_count($this_uri, '/') == 2) { list($dir, $c, $m) = explode('/', $this_uri); $path = dr_get_app_dir($dir); if (is_file($path.'Models/Auth.php')) { $obj = \Phpcmf\Service::M('auth', $dir); if (method_exists($obj, 'is_auth') && $obj->is_auth($c, $m)) { return true; } } } $this->_auth_uri = $this_uri; return false; } // 获取权限菜单名称 public function get_auth_name() { if (!$this->_auth_uri) { return ''; } $cache = \Phpcmf\Service::C()->get_cache('menu-admin-uri'); if (isset($cache[$this->_auth_uri]) && $cache[$this->_auth_uri]) { return $cache[$this->_auth_uri]['name']; } return ''; } // 后台菜单字符串 public function _admin_menu($menu) { if (!$menu) { return ''; } $_i = 1; $on = 'on'; //$this->admin['color']; $_uri = \Phpcmf\Service::L('router')->uri(); $_link = ''; $_select = 0; $more = []; foreach ($menu as $name => $t) { $p = []; $uri = $t[0]; if (strpos($uri, '{') !== false && preg_match('/\{(.+)\}/', $uri, $m)) { $uri = str_replace($m[0], '', $uri); $param = explode('&', $m[1]); foreach ($param as $tt) { list($a, $b) = explode('=', $tt); $p[$a] = $b; } } $_attr = $_li_class = ''; // 获取URL if (strpos($uri, 'ajax:') === 0) { $uri = substr($uri, 5); $url = 'javascript:dr_admin_menu_ajax(\'' . \Phpcmf\Service::L('router')->url($uri, $p) . '\');'; } elseif (strpos($uri, 'blank:') === 0) { $uri = substr($uri, 6); $url = dr_url($uri).'" target="_blank'; } elseif (strpos($uri, 'add:') === 0) { $w = isset($t[2]) ? $t[2] : ''; $h = isset($t[3]) ? $t[3] : ''; $uri = substr($uri, 4); $url = 'javascript:dr_iframe(\''.dr_lang($name).'\', \'' . \Phpcmf\Service::L('router')->url($uri, $p) . '\', \'' . $w . '\',\'' . $h . '\');'; }elseif (strpos($uri, 'show:') === 0) { $w = isset($t[2]) ? $t[2] : ''; $h = isset($t[3]) ? $t[3] : ''; $uri = substr($uri, 5); $url = 'javascript:dr_iframe_show(\''.$name.'\', \'' . \Phpcmf\Service::L('router')->url($uri, $p) . '\', \'' . $w . '\',\'' . $h . '\');'; } elseif (in_array($name, ['help', 'ba'])) { if (CI_DEBUG && !IS_OEM_CMS) { $t[1] = 'fa fa-question-circle'; $name = dr_lang('在线帮助'); $url = 'javascript:dr_help(\''.$uri.'\');'; } else { continue; } } elseif (strpos($uri, 'js:') === 0) { $url = 'javascript:'.substr($uri, 3).'();'; } elseif (strpos($uri, 'hide:') === 0) { $uri = trim(substr($uri, 5), '/'); $url = dr_now_url(); $_li_class = $uri == $_uri ? '' : '{HIDE}'; } elseif (strpos($uri, 'url:') === 0) { $url = substr($uri, 4); $uri = $t[2]; if (!$url && !$uri) { continue; } } else { $url = \Phpcmf\Service::L('router')->url($uri, $p); } // 验证URI权限 if (!$this->_is_admin_auth($uri)) { continue; } $class = ''; $_i == 1 && $class = ' {ONE}'; // 第一个菜单标识 // 选中当前菜单 if ($uri && trim($uri, '/') == $_uri) { $class .= ' ' . $on; $_select = 1; } // 生成链接 $name = \Phpcmf\Service::IS_PC_USER() ? dr_lang($name) : dr_strcut(dr_lang($name), 4, ''); $_link .= '
  • ' . ($t[1] ? ' ' : '') . $name . '
  • '; $_i++; } // 默认选中第一个菜单 !$_select && $_link = str_replace('{ONE}', $on, $_link); return str_replace('{HIDE}', 'hidden', $_link); } // 多级框架菜单 public function _iframe_menu($list, $now, $help = 0) { $i = 0; $menu = ''; $more = ''; foreach ($list as $dir => $t) { $i++; $class = ''; // 选中当前菜单 if ($now == $dir) { $class = ' on'; } if ($i > 4) { $more .= '
  • '.dr_lang($t['name']).'
  • '; } else{ $menu .= '
  • '.dr_lang($t['name']).'
  • '; } } if ($more) { $menu.= ''; } if (CI_DEBUG && $help) { $menu .= '
  • '.dr_lang('在线帮助').'
  • '; } return $menu; } // 模块后台菜单 public function _module_menu($module, $list_name, $list_url, $post_url) { return '_module_menu函数已弃用,请升级建站系统插件'; } // 导航后台菜单 public function _navigator_menu($type, $list_name, $list_url, $post_url) { return '_navigator_menu函数已弃用,请升级自定义链接插件'; } // 模块栏目的快捷菜单 public function _module_category_menu($module) { return '_module_category_menu函数已弃用'; } // 菜单点击url public function _menu_link_url($select, $uri = '', $param = [], $is_url = false) { if ($uri && !$this->_is_admin_auth($uri)) { // 没权限 return 'javascript:;'; } !$uri && $uri = $select; $menu = \Phpcmf\Service::L('cache')->get('menu-admin-uri', $select); if ($menu) { return 'javascript:top.Mlink('.intval($menu['tid']).', '.intval($menu['pid']).', '.intval($menu['id']).', \''.\Phpcmf\Service::L('router')->url($uri, $param).'\');'; } elseif ($is_url) { return dr_url($select); } else { return 'javascript:;'; } } // 程序鉴权 public function license() { } // 缓存 public function cache($site = SITE_ID) { $data = $this->get_role_all(); $cache = []; if ($data) { foreach ($data as $i => $t) { if ($t['system']) { // 系统可见菜单uri $uri = []; if ($t['system']['id']) { $m = $this->db->table('admin_menu')->whereIn('id', $t['system']['id'])->get()->getResultArray(); if ($m) { foreach ($m as $c) { $c['uri'] && $uri[] = $c['uri']; } } } if ($t['system']['auth']) { foreach ($t['system']['auth'] as $u => $action) { $uri[] = $u; $u = str_replace('/index', '/', $u); if ($action) { foreach ($action as $at) { $uri[] = $u.$at; } } } } unset($t['system']['auth']); $t['system']['uri'] = @array_unique($uri); sort($t['system']['uri']); sort($t['module']); $t['module'] && $t['system']['uri'] = dr_array2array($t['module'], $t['system']['uri']); } if (!IS_SITES) { // 没有多站点时主动赋值1 $t['site'] = [1]; } $cache[$t['id']] = $t; } } \Phpcmf\Service::L('cache')->set_file('auth', $cache); } }