0817c81e67
EnsureSaasAdmin fail-closed 503 вне dev/testing → вся админка на боевом liderra.ru недоступна (все /api/admin/* падали). Настоящий saas-admin SSO (Yandex 360) ещё не готов (Б-1 + DO-4), но держать зону наглухо закрытой нельзя — заказчику нужна админка. Стопгэп (выбор заказчика): защита /admin + /api/admin/* переносится на nginx (отдельный HTTP Basic Auth, /etc/nginx/.htpasswd-admin), middleware зону больше не закрывает. Тест production-кейса переведён с 503 на 200. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
37 lines
1.6 KiB
PHP
37 lines
1.6 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.
|
|
*
|
|
* СТОПГЭП (2026-05-25): защита боевой админ-зоны (/admin + /api/admin/*)
|
|
* перенесена на уровень nginx — отдельный HTTP Basic Auth с собственным
|
|
* паролем (`/etc/nginx/.htpasswd-admin`, location ^~ /admin и ^~ /api/admin).
|
|
* Поэтому middleware больше не закрывает зону на проде: дверь держит nginx.
|
|
*
|
|
* Ранее (Sprint 3F) здесь был fail-closed 503 вне dev/testing — он закрывал
|
|
* всю админку на проде наглухо, т.к. настоящий saas-admin SSO (Yandex 360)
|
|
* ещё не готов (гейтится Б-1 + DO-4). Замок 503 снят осознанно: оголять
|
|
* /api/admin/* в интернет нельзя, но nginx-пароль её прикрывает.
|
|
*
|
|
* admin_user_id для audit-trail по-прежнему резолвится трейтом
|
|
* ResolvesAdminUserId (стаб super_admin) — это отдельная зона.
|
|
*
|
|
* TODO (после Б-1 + DO-4): заменить nginx-дверь на настоящий saas-admin
|
|
* guard (Yandex 360 SSO-сессия + роль), вернуть проверку в это middleware.
|
|
*/
|
|
class EnsureSaasAdmin
|
|
{
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
return $next($request);
|
|
}
|
|
}
|