赛亿官网

Base.php 4.4KB

    <?php namespace app\admin\controller; use think\Controller; use think\Request; use app\admin\model\SysMenu as SysMenuModel; use app\admin\model\SysRole as SysRoleModel; class Base extends Controller { protected $uid; protected $username; protected $role_id; private $sysMenuModel; public function __construct(Request $request = null) { parent::__construct($request); //判断是否登陆 if (!session('uid') && !session('username') ) { $this->error('您还没有登录, 请登录', '/admin/login'); } $this->sysMenuModel = new SysMenuModel(); // 登录用户信息 $this->uid = session('uid'); $this->username = session('username'); $this->role_id = session('role_id'); // //权限检查 if (!$this->checkAuthor($this->role_id)) { $this->error('你无权限操作'); } //记录日志 $this->addLog(); //菜单数据 $data_menu = obj_tree($this->getMenu($this->role_id)); //当前活动菜单父id $controller = $request->controller(); $menu_url = strtolower('admin/'.preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $controller)).'/index'; $active_pid = $this->sysMenuModel->where('url', $menu_url)->value('pid'); // var_dump($active_pid); // exit; //当前控制器及方法(转小写) $controller = strtolower($controller); $action = strtolower($request->action()); // 模板输出 $this->assign('data_menu', $data_menu); $this->assign('active_pid', $active_pid); $this->assign('controller', $controller); $this->assign('action', $action); } /** * 目录获取 */ private function getMenu($rid) { if ($rid === 1) { $data = $this->sysMenuModel ->where('type!=2') ->field('id, pid, name, url, type, icon') ->select(); } else { $sysRoleModel = new SysRoleModel(); $permission_ids = $sysRoleModel->where('id', $rid)->value('permissions'); $data = $this->sysMenuModel ->where('type!=2') ->where('id', 'IN', $permission_ids) ->field('id, pid, name, url, icon') ->select(); } return $data; } /** * 权限检查 */ private function checkAuthor($rid) { if (!$rid) { return false; } if ($rid==1) { return true; } $c = strtolower(request()->controller()); $a = strtolower(request()->action()); if (preg_match('/^public_/', $a)) { return true; } if ($c == 'index' && $a == 'index') { return true; } $permission_ids = $this->getMenu($rid); $permissions = $this->sysMenuModel->where('id', 'IN', $permission_ids)->field('id, pid, name, url')->select(); // dump($permissions); foreach ($permissions as $v) { if($v->url=='admin/'.$c.'/'.$a) { return true; } } return false; } /** * 记录日志 */ private function addLog() { $data = array(); $data['querystring'] = request()->query()?'?'.request()->query():''; $data['m'] = request()->module(); $data['c'] = request()->controller(); $data['a'] = request()->action(); $data['method'] = request()->method(); $data['userid'] = $this->uid; $data['username'] = $this->username; $data['ip'] = request()->ip(); $data['time'] = time(); $arr = []; // $logLevel = 0; $logLevel = 1; // $logLevel = 2; switch ($logLevel) { case 2: $arr = array_merge($arr, ['SysUser/index','SysRole/index', 'SysMenu/index']); case 1: $arr = array_merge($arr, ['Category/index','Article/index', 'FileManager/index']); default: $arr = array_merge($arr, ['Index/index','SysLog/index','SysSet/index']); break; } // dump($arr); // dump(!in_array($data['c'].'/'.$data['a'], $arr)); // exit; if (!in_array($data['c'].'/'.$data['a'], $arr)) { db('sys_log')->insert($data); } } }