<?php namespace app\admin\controller; use app\admin\model\PermissionModel; use app\admin\model\StaffRoleModel; use think\Controller; use think\facade\Cookie; use think\facade\Request; /** * 控制器基类 * 验证用户是否登录, * 验证用户的管理权限 * Class Base * @package app\admin\controller */ class Base extends Controller { //登录检测 protected function initialize(){ $this->check(); } private function check(){ $single = new SingleSign(); try { $user = $single->getUserInfo(); Cookie::set('user',$user['ukey']); $user['user_id'] = $single->getUserId($user); session('user', $user); $sUser['name'] = $user['name']; $sUser['is_admin'] = $user['is_admin'] === true ? true : false; $sUser['user_id'] = $user['user_id']; //保存加密串到redis $single->saveKey($user['ukey'],$sUser); } catch ( \Exception $e){ // dd($e->getMessage().$e->getFile().$e->getLine()); $this->redirect('/login'); } if(!$user['is_admin']){ $this->authCheck($user['user_id']); } } //检测当前用户对当前url是否具备权限 private function authCheck($user_id){ //通过uid查询roleid通过roleid查询权限列表 $permissions = StaffRoleModel::getStaffRolesById($user_id); $permissions = explode(',',$permissions); //获取当前访问路由 $path = Request::pathinfo() ?: '/'; if($path !== '/'){ //检测是否存在数字,如果存在数字则删除最后一个/之后的所有数据 if(preg_match('/[0-9]+/',$path)){ $path = substr($path,0,strrpos($path,'/')); } //过滤权限 if($path != 'reset'){ //查询当前路由信息 $permission = PermissionModel::field('id,nav_url')->get(['nav_url'=>$path]); if(isset($permission->id)){ if(!in_array($permission->id,$permissions) || $permission == null){ $this->error('你没有访问'.$path."操作的权限",'/','close',2); } } else { $this->error($path,'/','close',2); } } } } }