subsiteService = $subsiteService; } /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param array $args * * @return mixed */ public function handle(Request $request, \Closure $next, ...$args) { if (!Admin::user() || !empty($args) || $this->shouldPassThrough($request)) { return $next($request); } //处理分站权限 if (!Admin::user()->canVisitSubsite(get_subsite_id())) { Checker::error("你没有该分站权限"); } if ($this->checkRoutePermission($request)) { return $next($request); } if (!Admin::user()->allPermissions()->first(function ($permission) use ($request) { return $permission->shouldPassThrough($request); })) { Checker::error(); } return $next($request); } /** * If the route of current request contains a middleware prefixed with 'admin.permission:', * then it has a manually set permission middleware, we need to handle it first. * * @param Request $request * * @return bool */ public function checkRoutePermission(Request $request) { if (!$middleware = collect($request->route()->middleware())->first(function ($middleware) { return Str::startsWith($middleware, $this->middlewarePrefix); })) { return false; } $args = explode(',', str_replace($this->middlewarePrefix, '', $middleware)); $method = array_shift($args); if (!method_exists(Checker::class, $method)) { throw new \InvalidArgumentException("Invalid permission method [$method]."); } call_user_func_array([Checker::class, $method], [$args]); return true; } /** * Determine if the request has a URI that should pass through verification. * * @param \Illuminate\Http\Request $request * * @return bool */ protected function shouldPassThrough($request) { $excepts = [ admin_base_path('auth/login'), admin_base_path('auth/logout'), ]; foreach ($excepts as $except) { if ($except !== '/') { $except = trim($except, '/'); } if ($request->is($except)) { return true; } } return false; } }