我可以创建一个执行 guzzle 请求的中间件吗?

Can i create a middleware that executes an guzzle request?

我需要检查 spatie/laravel-permission 提供的用户角色,我想知道是否可以在每个路由上执行的中间件中创建一个 guzzle 请求。

对于 API 我正在使用 Laravel/Passport。

也欢迎对 other/better 方法提出建议。

此代码用于 Guzzle http 请求:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use Session;

class CheckPermission
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next, $requiredRoles="none")
    {

        $response = Http::withToken(Session::get('accessToken'))->withHeaders([
                    "User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
                    "Origin" => "http://base.fourdesign-test.nl",
                    'Content-Type' => "application/json",
                    "Access-Control-Allow-Origin" => '*'])->withOptions(['base_uri' => env('API_URL')])->get("/api/checkpermission");

        if(!$response) {
            die();
        }

        if($requiredRoles == "none" && empty($response['userRoles'])) {
            return $next($request);
        } else if(empty($response['userRoles'])) {
            return redirect('/login');
        }

        $requiredRoles = explode("|", $requiredRoles);
        $allowRequest = false;
        foreach ($response['userRoles'] as $userRole) {
            Session::put($userRole, true);
            foreach ($requiredRoles as $requiredRole) {
                if ($requiredRole == 'none') {
                    $allowRequest = true;
                }
                if ($requiredRole == $userRole) {
                    $allowRequest = true;
                }
            }
        }

        if ($allowRequest === true) {
            return $next($request);
        }

        return redirect()->back();
    }
}