Skip to content

Безопасность и авторизация

ADP собирает данные аутентификации и авторизации из вашего приложения: идентификацию пользователя, роли, токены, события входа/выхода, решения по доступу и имперсонацию. Инспектор также предоставляет просмотр конфигурации безопасности в реальном времени.

AuthorizationCollector

AuthorizationCollectorAppDevPanel\Kernel\Collector\AuthorizationCollectorCaptures authentication and authorization data.final Kernel · class · implements SummaryCollectorInterface собирает данные безопасности во время выполнения. Реализует 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}.Kernel · interface · extends CollectorInterface для отображения в списке debug-записей.

Собираемые данные

ПолеТипОписание
username?stringИдентификатор аутентифицированного пользователя
rolesstring[]Назначенные роли
effectiveRolesstring[]Вычисленные роли (из иерархии)
firewallName?stringАктивный firewall/guard
authenticatedboolАутентифицирован ли пользователь
token?{type, attributes, expiresAt}Информация о токене (JWT, session, API key)
impersonation?{originalUser, impersonatedUser}Данные подмены пользователя
guardsarrayКонфигурации guard/firewall
roleHierarchyarray<string, string[]>Карта наследования ролей
authenticationEventsarrayСобытия входа, выхода, ошибок с таймингом
accessDecisionsarrayПроверки авторизации с voters и результатами

Методы сбора

php
$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.final Kernel · class · implements SummaryCollectorInterface из нативной системы аутентификации фреймворка.

Symfony

AuthorizationSubscriberAppDevPanel\Adapter\Symfony\EventSubscriber\AuthorizationSubscriberListens to Symfony Security events and feeds AuthorizationCollector.final Adapter/Symfony · class · implements EventSubscriberInterface слушает события Symfony Security. Требуется symfony/security-httpversiondownloadssymfony/security-httpView on Packagistversiondownloadslicensephp version.

СобытиеСобираемые данные
LoginSuccessEventSymfony\Component\Security\Http\Event\LoginSuccessEventDispatched after a successful authentication. Contains the authenticated token, request, and firewall name.Symfony · classИдентификация пользователя, роли, firewall, тип токена, имперсонация
LoginFailureEventSymfony\Component\Security\Http\Event\LoginFailureEventDispatched when authentication fails. Contains the authentication exception and request.Symfony · classСобытие неудачной аутентификации с деталями исключения
LogoutEventSymfony\Component\Security\Http\Event\LogoutEventDispatched on user logout. Contains the request, response, and token.Symfony · classСобытие выхода
SwitchUserEventSymfony\Component\Security\Http\Event\SwitchUserEventDispatched when impersonation (user switching) occurs.Symfony · classДанные имперсонации
VoteEventSymfony\Component\Security\Core\Event\VoteEventDispatched by the access decision manager for each voter's vote on an authorization check.Symfony · classРешения по доступу с результатами voters

TIP

Включите в config/packages/app_dev_panel.yaml:

yaml
app_dev_panel:
    collectors:
        security: true

Laravel

AuthorizationListenerAppDevPanel\Adapter\Laravel\EventListener\AuthorizationListenerListens for Laravel Auth events and feeds AuthorizationCollector.final Adapter/Laravel · class слушает события Laravel Auth.

СобытиеСобираемые данные
AuthenticatedIlluminate\Auth\Events\AuthenticatedFired when a user is authenticated (on each request after session check).Laravel · classИдентификация пользователя, имя guard
LoginIlluminate\Auth\Events\LoginFired when a user logs in via credentials or remember token.Laravel · classСобытие входа, флаг remember
LogoutIlluminate\Auth\Events\LogoutFired when a user logs out.Laravel · classСобытие выхода
FailedIlluminate\Auth\Events\FailedFired when an authentication attempt fails.Laravel · classНеудачная аутентификация с ключами credentials
OtherDeviceLogoutIlluminate\Auth\Events\OtherDeviceLogoutFired when sessions on other devices are invalidated.Laravel · classВыход на другом устройстве

Yii 2

AuthorizationListenerAppDevPanel\Adapter\Yii2\EventListener\AuthorizationListenerListens for Yii 2 User component events and feeds AuthorizationCollector.final Adapter/Yii2 · class подключается к событиям Useryii\web\UserManages user authentication state. Provides login, logout, and identity management.Yii 2 · class.

СобытиеСобираемые данные
User::EVENT_AFTER_LOGINID пользователя, duration, cookie-based флаг
User::EVENT_AFTER_LOGOUTСобытие выхода с ID пользователя
Application::EVENT_BEFORE_REQUESTТекущий пользователь сессии на каждый запрос

Yii 3

AuthorizationCollector зарегистрирован в DI, но требует ручных вызовов — в Yii 3 нет стандартизированной системы событий аутентификации.

Инспектор авторизации

Инспектор предоставляет просмотр конфигурации безопасности в реальном времени через GET /inspect/api/authorization.

Ответ

json
{
  "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.final API · class · implements AuthorizationConfigProviderInterface (пустые массивы).

Frontend

AuthorizationPanel (Debug)

Отображает данные безопасности для каждого запроса в debug-панели:

  • Карточка пользователя (username, статус, firewall, роли, эффективные роли, токен)
  • Баннер имперсонации (при активности)
  • Таймлайн событий аутентификации (вход, выход, ошибка)
  • Таблица решений по доступу (раскрываемая, показывает voters и контекст)

AuthorizationPage (Inspector)

Расположена по адресу /inspector/authorization. Отображает конфигурацию безопасности в реальном времени:

  • Таблица guards (имя, provider, конфигурация)
  • Дерево иерархии ролей (роль → унаследованные роли)
  • Таблица voters/policies (имя, тип, приоритет)
  • JSON конфигурации безопасности

Выпущено под лицензией MIT.