true, // 认证开关 'auth_type' => 1, // 认证方式,1为实时认证;2为登录认证。 'auth_group' => 'auth_group', // 用户组数据表名 'auth_group_access' => 'auth_group_access', // 用户-用户组关系表 'auth_rule' => 'auth_rule' // 权限规则表 ]; /** * $prefix表前缀 */ public function __construct() { // 判断配置 if ( config('AUTH_CONFIG') ) { //可设置配置项 AUTH_CONFIG, 此配置项为数组。 $this->_config = array_merge($this->_config, config('AUTH_CONFIG')); } } /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle(Request $request, Closure $next) { // 当前路径 $path = ltrim($request->getPathInfo(), '/'); // 小程序/公众号的授权需要单独判断 if( stripos('&'.$path,'company/open_plat/install/wxwork_auth') == 1 ) return $next($request); // 判断是否需要验证登录 if ( !in_array($path, $this->except) ) { // 用户ID $uid = request('access_token.uid',0); // 如果未登录 if( !$uid ) return json_send(['code'=>'no_login','msg'=>'请登录账号','data'=>['请您登录']]); // 如果不是超级管理员 if ( !request('access_token.is_super',0) ) { // 进行验证 if ( !$this->check($path, $uid ) ) return json_send(['code'=>'error','msg'=>'您没有操作权限','data'=>['没有操作权限']]); } } // 返回下一个闭包 return $next($request); } /** * 检查权限 * @param name string|array 需要验证的规则列表 * @param uid int 认证用户的id * @return boolean 通过验证返回true;失败返回false */ private function check($path, $uid) { // 未开启验证,直接通过 if ( !$this->_config['auth_on'] ) return true; // 获取用户需要验证的所有有效规则列表 $authList = (new AuthRuleCompany())->getAuthList($uid,'company'); // 切割path $path = explode('/', $path); // 没有控制器 if( count($path) < 2 ) $path[] = 'index'; // 没有方法 if( count($path) < 3 ) $path[] = 'index'; // 切割path $path = implode('/', $path); // 判断是否通过验证 return in_array($path, $authList); } }