e6752b5e4c
Allows SaaS-admin area in non-local/testing envs only when SAAS_ADMIN_TEST_BYPASS=true. Default false -> production unaffected. Remove after Yandex 360 SSO (Б-1 + DO-4). TDD: tests/Feature/Middleware/EnsureSaasAdminTest.php (2 passing). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
45 lines
1.8 KiB
PHP
45 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
/**
|
|
* Гейт SaaS-admin зоны (/api/admin/*) — audit-находка J2.
|
|
*
|
|
* СТАБ (Sprint 3F): полноценная авторизация saas-admin требует Yandex 360
|
|
* SSO-входа, который гейтится Б-1 (регистрация ООО) + DO-4. До их закрытия
|
|
* реального механизма аутентификации нет.
|
|
*
|
|
* Поведение стаба:
|
|
* - dev / testing (local, testing) → пропускаем. Admin-панель работает на
|
|
* dev; admin_user_id передаётся параметром (трейт ResolvesAdminUserId).
|
|
* - прочие окружения (production / staging) → fail-closed 503: зона
|
|
* закрыта до подключения реального SSO. Явный 503 лучше, чем тихо
|
|
* открытый /api/admin/* в проде.
|
|
*
|
|
* TODO (после Б-1 + DO-4): заменить на проверку Yandex 360 SSO-сессии
|
|
* saas-admin (отдельный guard) + роль (compliance и т.п. где требуется).
|
|
*/
|
|
class EnsureSaasAdmin
|
|
{
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
if (app()->environment('local', 'testing')) {
|
|
return $next($request);
|
|
}
|
|
|
|
// ВРЕМЕННО (тест-деплой): пропускаем при включённом флаге.
|
|
// TODO: убрать после внедрения Yandex 360 SSO (Б-1 + DO-4).
|
|
if (config('app.saas_admin_test_bypass') === true) {
|
|
return $next($request);
|
|
}
|
|
|
|
abort(503, 'SaaS-admin авторизация не настроена (ожидает Б-1 + DO-4).');
|
|
}
|
|
}
|