Документация для разработчиков
Темная тема

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
)
  • $enabled {bool} Включает или отключает проверку на токен. По умолчанию true.
  • $tokenName {string} Имя, по которому передается значение токена. Используется для поиска в $_GET, $_POST. По умолчанию sessid.
  • $returnNew {bool} Сигнализирует нужно ли возвращать новое значение токена, если проверка прошла неуспешно. Заметим, что возврат осуществляется через \Bitrix\Main\Error::$customData. По умолчанию 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
)
  • $origin {string} Используется для установки заголовка Access-Control-Allow-Origin. По умолчанию null.
  • $credentials {bool} Если true, то устанавливается заголовок Access-Control-Allow-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.


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Александр Киселев
Сообщение не промодерировано, возможны ошибки и неточности.
Код
public function configureActions(): array
    {
        $prefilters = [
            new ActionFilter\HttpMethod([
                ActionFilter\HttpMethod::METHOD_POST
            ]),
        ];

        $excludedPreFilters = [
            ActionFilter\Authentication::class,
        ];

        return [
            'save' => [
                'prefilters' => $prefilters,
                '-prefilters' => $excludedPreFilters,
            ],
            'checkOrganization' => [
                'prefilters' => $prefilters,
                '-prefilters' => $excludedPreFilters,
            ],
        ];
    }
3
Александр Шевчук
Сообщение не промодерировано, возможны ошибки и неточности.
Пример использования:
Код
    //Внутри класса расширяющего Controllerable

    use Bitrix\Main\Engine\ActionFilter;    

    public function getIBlockElementByIdAction($id): string {...}

    public function configureActions(): array
    {
        return [
            //Название вашего Action
            'getIBlockElementById' => [
                //Отключение фильтра
                '-prefilters' => [
                    ActionFilter\Authentication::class,
                ],
                //Включение фильтра                
                'prefilters' => [
                    ActionFilter\Csrf::class,
                ],
            ],
        ];
    }

© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх