feat(core): harden sessions settlement and credit activity
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
lotterLaravel E2E / e2e-api (push) Has been cancelled

This commit is contained in:
wchino
2026-07-22 20:53:43 +08:00
parent 35f6e46958
commit 15bd997c4e
48 changed files with 1920 additions and 93 deletions

View File

@@ -7,6 +7,7 @@ use App\Models\AdminUser;
use App\Lottery\ErrorCode;
use App\Support\ApiResponse;
use Illuminate\Http\Request;
use Laravel\Sanctum\PersonalAccessToken;
use Symfony\Component\HttpFoundation\Response;
/**
@@ -37,6 +38,25 @@ final class EnsureAdminApi
);
}
$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);