lotteryAdmin()` 读取。 */ final class EnsureAdminApi { public function handle(Request $request, Closure $next): Response { $user = $request->user(); if (! $user instanceof AdminUser) { return ApiResponse::error( trans('admin.unauthenticated', [], $request->lotteryLocale()), ErrorCode::AdminUnauthenticated->value, null, 401, ); } if ((int) $user->status !== 0) { return ApiResponse::error( trans('admin.account_disabled', [], $request->lotteryLocale()), ErrorCode::AdminAccountDisabled->value, null, 403, ); } $accessToken = $user->currentAccessToken(); if ( (int) $user->admin_session_version > 0 && $accessToken instanceof PersonalAccessToken && $accessToken->name === 'admin-api' ) { $expectedAbility = 'admin-session:'.(int) $user->admin_session_version; $abilities = is_array($accessToken->abilities) ? $accessToken->abilities : []; if (! in_array($expectedAbility, $abilities, true)) { return ApiResponse::error( trans('admin.session_replaced', [], $request->lotteryLocale()), ErrorCode::AdminSessionReplaced->value, null, 401, ); } } $request->attributes->set('lottery_admin', $user); return $next($request); } }