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 = '
'.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 .= '';
} else{
$menu .= '';
}
}
if ($more) {
$menu.= ' '.dr_lang('更多').'';
$menu.= '';
$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);
}
}