如何解决我可以创建一个执行 guzzle 请求的中间件吗?
我需要检查 spatie/laravel-permission 提供的用户角色,我想知道是否可以在每个路由上执行的中间件中创建一个 guzzle 请求。
对于 API,我使用的是 Laravel/Passport。
也欢迎对其他/更好方法的建议。
解决方法
此代码用于 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();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。