2023-02-17 12:58:20 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
|
|
|
|
use Closure;
|
|
|
|
use Illuminate\Http\RedirectResponse;
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
use Illuminate\Http\Response;
|
|
|
|
|
|
|
|
class TrustedDomain
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Handle an incoming request.
|
|
|
|
*
|
|
|
|
* @param Closure(Request): (Response|RedirectResponse) $next
|
|
|
|
*/
|
|
|
|
public function handle(Request $request, Closure $next): mixed
|
|
|
|
{
|
|
|
|
$user = $request->user('sanctum');
|
|
|
|
|
2023-02-17 12:59:01 +00:00
|
|
|
if (! $user) {
|
2023-02-17 12:58:20 +00:00
|
|
|
return $next($request);
|
|
|
|
}
|
|
|
|
|
|
|
|
// 获取请求的域名
|
|
|
|
$requestHost = parse_url($request->header('referer'), PHP_URL_HOST);
|
|
|
|
|
|
|
|
if ($requestHost) {
|
|
|
|
// 获取当前域名
|
|
|
|
$currentHost = parse_url(config('app.url'), PHP_URL_HOST);
|
|
|
|
|
|
|
|
// 如果请求的域名和当前域名相同,则直接放行
|
|
|
|
if ($requestHost === $currentHost) {
|
|
|
|
return $next($request);
|
|
|
|
}
|
|
|
|
|
2023-02-17 12:59:01 +00:00
|
|
|
return $user->tokenCan('domain-access:'.$requestHost) ? $next($request) : response()->json([
|
2023-02-17 12:58:20 +00:00
|
|
|
'message' => 'Token 无权访问此域名。',
|
|
|
|
], 401);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $next($request);
|
|
|
|
}
|
|
|
|
}
|