Безопасность и авторизация
ADP собирает данные аутентификации и авторизации из вашего приложения: идентификацию пользователя, роли, токены, события входа/выхода, решения по доступу и имперсонацию. Инспектор также предоставляет просмотр конфигурации безопасности в реальном времени.
AuthorizationCollector
AuthorizationCollectorAppDevPanel\Kernel\Collector\AuthorizationCollectorCaptures authentication and authorization data. собирает данные безопасности во время выполнения. Реализует SummaryCollectorInterfaceAppDevPanel\Kernel\Collector\SummaryCollectorInterfaceSummary data collector responsibility is to collect summary data for a collector. Summary is used to display a list of previous requests and select one to display full info. Its data set is specific to the list and is reduced compared to full data collected in {@see CollectorInterface}. для отображения в списке debug-записей.
Собираемые данные
| Поле | Тип | Описание |
|---|---|---|
username | ?string | Идентификатор аутентифицированного пользователя |
roles | string[] | Назначенные роли |
effectiveRoles | string[] | Вычисленные роли (из иерархии) |
firewallName | ?string | Активный firewall/guard |
authenticated | bool | Аутентифицирован ли пользователь |
token | ?{type, attributes, expiresAt} | Информация о токене (JWT, session, API key) |
impersonation | ?{originalUser, impersonatedUser} | Данные подмены пользователя |
guards | array | Конфигурации guard/firewall |
roleHierarchy | array<string, string[]> | Карта наследования ролей |
authenticationEvents | array | События входа, выхода, ошибок с таймингом |
accessDecisions | array | Проверки авторизации с voters и результатами |
Методы сбора
$collector->collectUser('admin@example.com', ['ROLE_ADMIN'], true);
$collector->collectFirewall('main');
$collector->collectToken('jwt', ['sub' => '123'], '2026-12-31T23:59:59Z');
$collector->collectImpersonation('admin', 'user@example.com');
$collector->collectGuard('web', 'users', ['driver' => 'session']);
$collector->collectRoleHierarchy(['ROLE_ADMIN' => ['ROLE_USER', 'ROLE_EDITOR']]);
$collector->collectEffectiveRoles(['ROLE_ADMIN', 'ROLE_USER', 'ROLE_EDITOR']);
$collector->collectAuthenticationEvent('login', 'form_login', 'success', ['ip' => '127.0.0.1']);
$collector->logAccessDecision('EDIT', 'App\\Entity\\Post', 'ACCESS_DENIED', $voters, 0.002, ['route' => '/admin']);Интеграция с адаптерами
Каждый адаптер автоматически передаёт данные в AuthorizationCollectorAppDevPanel\Kernel\Collector\AuthorizationCollectorCaptures authentication and authorization data. из нативной системы аутентификации фреймворка.
Symfony
AuthorizationSubscriberAppDevPanel\Adapter\Symfony\EventSubscriber\AuthorizationSubscriberListens to Symfony Security events and feeds AuthorizationCollector. слушает события Symfony Security. Требуется symfony/security-httpsymfony/security-httpView on Packagist.
| Событие | Собираемые данные |
|---|---|
LoginSuccessEventSymfony\Component\Security\Http\Event\LoginSuccessEventDispatched after a successful authentication. Contains the authenticated token, request, and firewall name. | Идентификация пользователя, роли, firewall, тип токена, имперсонация |
LoginFailureEventSymfony\Component\Security\Http\Event\LoginFailureEventDispatched when authentication fails. Contains the authentication exception and request. | Событие неудачной аутентификации с деталями исключения |
LogoutEventSymfony\Component\Security\Http\Event\LogoutEventDispatched on user logout. Contains the request, response, and token. | Событие выхода |
SwitchUserEventSymfony\Component\Security\Http\Event\SwitchUserEventDispatched when impersonation (user switching) occurs. | Данные имперсонации |
VoteEventSymfony\Component\Security\Core\Event\VoteEventDispatched by the access decision manager for each voter's vote on an authorization check. | Решения по доступу с результатами voters |
TIP
Включите в config/packages/app_dev_panel.yaml:
app_dev_panel:
collectors:
security: trueLaravel
AuthorizationListenerAppDevPanel\Adapter\Laravel\EventListener\AuthorizationListenerListens for Laravel Auth events and feeds AuthorizationCollector. слушает события Laravel Auth.
| Событие | Собираемые данные |
|---|---|
AuthenticatedIlluminate\Auth\Events\AuthenticatedFired when a user is authenticated (on each request after session check). | Идентификация пользователя, имя guard |
LoginIlluminate\Auth\Events\LoginFired when a user logs in via credentials or remember token. | Событие входа, флаг remember |
LogoutIlluminate\Auth\Events\LogoutFired when a user logs out. | Событие выхода |
FailedIlluminate\Auth\Events\FailedFired when an authentication attempt fails. | Неудачная аутентификация с ключами credentials |
OtherDeviceLogoutIlluminate\Auth\Events\OtherDeviceLogoutFired when sessions on other devices are invalidated. | Выход на другом устройстве |
Yii 2
AuthorizationListenerAppDevPanel\Adapter\Yii2\EventListener\AuthorizationListenerListens for Yii 2 User component events and feeds AuthorizationCollector. подключается к событиям Useryii\web\UserManages user authentication state. Provides login, logout, and identity management..
| Событие | Собираемые данные |
|---|---|
User::EVENT_AFTER_LOGIN | ID пользователя, duration, cookie-based флаг |
User::EVENT_AFTER_LOGOUT | Событие выхода с ID пользователя |
Application::EVENT_BEFORE_REQUEST | Текущий пользователь сессии на каждый запрос |
Yii 3
AuthorizationCollector зарегистрирован в DI, но требует ручных вызовов — в Yii 3 нет стандартизированной системы событий аутентификации.
Инспектор авторизации
Инспектор предоставляет просмотр конфигурации безопасности в реальном времени через GET /inspect/api/authorization.
Ответ
{
"guards": [
{"name": "web", "provider": "users", "config": {"driver": "session"}}
],
"roleHierarchy": {
"ROLE_ADMIN": ["ROLE_USER", "ROLE_EDITOR"]
},
"voters": [
{"name": "RoleVoter", "type": "voter", "priority": 255}
],
"config": {
"access_decision_manager": {"strategy": "affirmative"}
}
}Адаптеры реализуют AuthorizationConfigProviderInterface для предоставления этих данных. По умолчанию: NullAuthorizationConfigProviderAppDevPanel\Api\Inspector\Authorization\NullAuthorizationConfigProviderDefault no-op provider when no framework adapter supplies authorization config. (пустые массивы).
Frontend
AuthorizationPanel (Debug)
Отображает данные безопасности для каждого запроса в debug-панели:
- Карточка пользователя (username, статус, firewall, роли, эффективные роли, токен)
- Баннер имперсонации (при активности)
- Таймлайн событий аутентификации (вход, выход, ошибка)
- Таблица решений по доступу (раскрываемая, показывает voters и контекст)
AuthorizationPage (Inspector)
Расположена по адресу /inspector/authorization. Отображает конфигурацию безопасности в реальном времени:
- Таблица guards (имя, provider, конфигурация)
- Дерево иерархии ролей (роль → унаследованные роли)
- Таблица voters/policies (имя, тип, приоритет)
- JSON конфигурации безопасности