Yandex Metrika
sanches.free

Проверка административного раздела в Bitrix D7: HttpRequest::isAdminSection()

Зачем отличать публичную часть от админки

В общем коде компонентов и сервисов часто нужно по-разному включать отладку, кеш, права или формат ответа: в /bitrix/admin/ и сопутствующих сценариях окружение отличается от витрины. Вместо самодельных проверок по подстроке в REQUEST_URI разумнее опереться на слой HTTP-контекста ядра.

Рекомендуемый способ в D7

У объекта текущего запроса есть метод, который инкапсулирует правила платформы:

use Bitrix\Main\Context;

$request = Context::getCurrent()->getRequest();

if ($request->isAdminSection()) {
    // сценарий только для административной зоны
}

Имя метода отражает суть: «сейчас обрабатывается административный раздел», без дублирования логики ядра в проекте.

Что обычно стоит за этой проверкой

На практике «админский» запрос связан с типовыми путями вроде каталога /bitrix/admin/ и связанными служебными входами, а также с тем, что при инициализации ядра для такого обращения выставляют признаки окружения: в том числе константу ADMIN_SECTION и параметры публичных инструментов, когда открыта соответствующая зона. Точный набор условий может меняться между версиями продукта, поэтому опора на isAdminSection() стабильнее, чем копировать вечный список путей у себя в коде.

Не путать с «пользователь — администратор сайта»

Флаг «мы в админке» описывает контекст URL и режима ядра, а не роль текущего пользователя. Проверка «это администратор» делается через модель прав и CurrentUser / $USER — это другой слой. Оба фильтра могут сочетаться, если нужно ограничить код только для авторизованных админов внутри административной части.

Константа ADMIN_SECTION и обёртка

В легаси и части примеров сообщества встречается явная проверка:

if (defined('ADMIN_SECTION') && ADMIN_SECTION === true) {
    // …
}

Для нового кода предпочтительнее isAdminSection(): одна точка правды и меньше расхождений при смене правил в ядре. Там, где старый код уже завязан на константу, миграцию можно делать постепенно.

Агенты, консоль и кастомные скрипты

Вне полноценного веб-запроса к странице админки контекст может быть неполным: например, агент или CLI-скрипт с «урезанным» прологом. В таких местах isAdminSection() не заменяет осознанного проектирования сценария — если логика должна выполняться «как в админке», иногда явно поднимают те же константы/окружение, что и у целевого входа, либо выносят общее в сервис без привязки к флагу раздела.

Итог

Для типового веб-обращения в продукте на D7 достаточно Context::getCurrent()->getRequest()->isAdminSection(), чтобы отделить административную зону от публичной; уточняйте права пользователя отдельно, не смешивая это с самим фактом «админского» запроса.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии