ActionFilter
Фильтры - это обработчики, которые выполняются до или после Action. С их помощью можно отклонить выполнение действия, либо повлиять на результат действия.
Существует два типа фильтров:
- prefilter - выполняется до запуска Action. Может отклонить выполнения действия.
- postfilter - выполняется после запуска Action. Может изменить результат выполнения действия.
\Bitrix\Main\Engine\ActionFilter\HttpMethod
Проверяет по какому http методу запускается действие и блокирует выполнение действия, если метод не был перечислен.
Метод | Параметр и описание | С версии |
---|---|---|
__construct( array $allowedMethods = [self::METHOD_GET] ) | $allowedMethods {array}. Список допустимых http методов. По умолчанию GET. |
\Bitrix\Main\Engine\ActionFilter\Authentication
Проверяет аутентифицирован ли пользователь и блокирует выполнение действия, если проверка не прошла, установив http status 401. Может выполнить редирект на страницу авторизации при необходимости.
Метод | Параметр и описание | С версии |
---|---|---|
__construct( $enableRedirect = false ) | $enableRedirect {bool}. Включает или отключает автоматический редирект на страницу авторизации, если проверка не прошла успешно. По умолчанию false. |
\Bitrix\Main\Engine\ActionFilter\Csrf
Проверяет наличие и корректность csrf-токена и блокирует выполнение действия, если проверка не прошла.
Метод | Параметр и описание | С версии |
---|---|---|
__construct( $enabled = true, $tokenName = 'sessid', $returnNew = true ) |
|
\Bitrix\Main\Engine\ActionFilter\CloseSession
Выполнит session_write_close() перед выполнением действия. Будьте внимательны при использовании данного фильтра! Так как после закрытия сессии, все внесенные в неё изменения не будут сохранены. Для понимания работы сессий, стоит ознакомиться с документацией на php.net.
Метод | Параметр и описание | С версии |
---|---|---|
__construct( $enabled = true ) | $enabled {bool}. Включает или отключает работу фильтра. По умолчанию true. |
\Bitrix\Main\Engine\ActionFilter\Scope
Позволяет заблокировать определенные действия для указанного scope, например, можно открыть только определенные действия для rest, а все остальные будут доступны только для ajax.
use \Bitrix\Main\Engine\ActionFilter\Scope; new Scope(Scope::NOT_REST); //разрешаем везде, кроме rest new Scope(Scope::AJAX); //разрешаем только в ajax
Метод | Параметр и описание | С версии |
---|---|---|
__construct( $scopes ) | $scopes {int} Перечисление допустимых scopes. Для проверки используются битовые маски. Доступные варианты можно найти в константах класса \Bitrix\Main\Engine\ActionFilter\Scope; |
\Bitrix\Main\Engine\ActionFilter\Cors
Устанавливает заголовки ответа для управления CORS.
Метод | Параметр и описание | С версии |
---|---|---|
__construct( string $origin = null, bool $credentials = false ) |
|
\Bitrix\Main\Engine\ActionFilter\ContentType
Фильтр разрешает выполнять действие, только в случае допустимых content-type в запросе. При работе с application/json будет автоматически зарегистрирован объект \Bitrix\Main\Engine\JsonPayload
, который можно внедрять в параметры через параметры аякс-действия.
Метод | Параметр и описание | С версии |
---|---|---|
__construct( array $allowedTypes ) | $allowedTypes {array}. Перечисление допустимых content-type. Например, ['application/json']. |
\Bitrix\Main\Engine\ActionFilter\PostDecode
Фильтр перекодирует данные из POST-запроса, если внутренняя кодировка проекта отличается от utf-8.
\Bitrix\Intranet\ActionFilter\UserType
Фильтр проверяет, принадлежит ли текущий пользователь к разрешенному списку типов пользователей. Например, если нужно разрешить доступ только пользователям экстранета и интранета.
При использовании убедитесь, что подключен модуль intranet
.
Метод | Параметр и описание | С версии |
---|---|---|
__construct( (array $allowedUserTypes) ) | $allowedUserTypes {array}. Перечисление допустимых типов пользователей. Например, ['extranet', 'intranet']. |
\Bitrix\Intranet\ActionFilter\IntranetUser
Фильтр проверяет, является ли текущий пользователь интранет-пользователем. Это упрощенный вариант случая UserType.
При использовании убедитесь, что подключен модуль intranet
.