Проверки доступа
Проверки выполняются в порядке таблицы. Событие After вызывается после успешной проверки. Во всех событиях доступен apiContext — контекст API.
| Проверка | До проверки | После проверки | Остальные параметры |
|---|---|---|---|
| Глобальные IP | onBeforeIpAccessGlobal | onAfterIpAccessGlobal | httpRequest, ipBlacklist, ipWhitelist |
| IP роута | onBeforeIpAccess | onAfterIpAccess | httpRequest, route, ipBlacklist, ipWhitelist |
| Авторизация | onBeforeAuthorization | onAfterAuthorization | httpRequest, route |
| Группы | onBeforeGroupAccess | onAfterGroupAccess | httpRequest, route |
| Расписание | onBeforeSchedule | onAfterSchedule | httpRequest, route |
| Лимит запросов | onBeforeRequestLimit | onAfterRequestLimit | httpRequest, route |
Глобальные IP-списки проверяются до маршрутизации. IP-списки роута — после onAfterRouting, до авторизации. Для роута вызываются onBeforeIpAccess и onAfterIpAccess; onBeforeIpAccessGlobal и onAfterIpAccessGlobal относятся только к глобальной проверке и повторно не запускаются. События IP-проверки роута вызываются и при пустых списках, в том числе при попадании в кеш ответа. Для штатного OPTIONS и ненайденного роута они не вызываются.
Данные проверки
В onBeforeIpAccessGlobal и onBeforeIpAccess можно заменить массивы ipBlacklist и ipWhitelist через EventResult::SUCCESS. Списки должны содержать допустимые IP-адреса или CIDR. After получает списки после применения результатов Before; их изменение в After не запускает повторную проверку. Примеры регистрации — в разделе «События».
Исходные IP-списки карты доступны через конфиг роута; изменения Before-обработчика передаются в параметрах события и не записываются в карту:
$config = $route->getConfig();
$blacklist = $config->getSecurityIpBlacklist();
$whitelist = $config->getSecurityIpWhitelist();Списки групп:
$config = $route->getConfig();
$blacklist = $config->getSecurityGroupBlacklist();
$whitelist = $config->getSecurityGroupWhitelist();ID пользователя API после авторизации:
$userId = $apiContext->getAuth()?->getUserId();Остановка запроса
Для немедленного ответа верните обычный массив или HttpResponse. Для штатного результата ошибки используйте EventResult::ERROR с exception или response — см. результат обработчика. Обычный return false проверку не отменяет.
Константы — в справочнике ModuleEventConfig.