我需要检查spatie/laravel-permission提供的用户角色,我想知道是否可以在中间件中创建一个在每条路径上执行的guzzle请求。
对于API,我使用Laravel/Passport。
对其他/更好方法的建议也是受欢迎的。
发布于 2021-05-14 18:05:32
Guzzle请求使用了以下代码:
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();
}
}https://stackoverflow.com/questions/66692824
复制相似问题