1С-Битрикс

Закрытие сайта в 1С Битрикс: оставляем доступ для определенных групп пользователей

Как закрыть сайт на Bitrix для неавторизованных пользователей, оставив доступ всем группам. Решение для тестирования с разными пользователями. Код и инструкция

sqlka.ruОпубликовано: Чтение: 3 мин.
Закрытие сайта в 1С Битрикс: оставляем доступ для определенных групп пользователей

При разработке и тестировании сайтов часто возникает необходимость временно скрыть его от посторонних глаз. Встроенное в 1С-Битрикс решение — кнопка «Временное закрытие публичной части сайта» — действует радикально: доступ остается только у администраторов. Это не подходит, когда нужно протестировать функционал для зарегистрированных клиентов, проверить цены для разных групп или показать сайт заказчику, у которого есть свой аккаунт.

В этой статье рассмотрим, как реализовать более гибкий сценарий: закрыть сайт только для гостей, сохранив полный доступ для всех авторизованных пользователей.

Шаг 1: Подготовка страницы-заглушки

Сначала создайте HTML-страницу, которую увидят неавторизованные посетители. Сохраните её как /bitrix/php_interface/include/site_closed.php.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Сайт временно закрыт</title>
</head>
<body>
    <h1>Мы работаем над улучшением сайта!</h1>
    <p>Приносим извинения за временные неудобства. Сайт временно недоступен для гостей.</p>
    <p>Если у вас есть аккаунт, <a href="https://blog.bxstudio.ru/auth/">авторизуйтесь</a>.</p>
</body>
</html>

Шаг 2: Добавление PHP-кода

Ключевой частью решения является обработчик события, который срабатывает на каждой странице до начала основной части (OnProlog). Добавьте этот код в файл init.php, расположенный в /bitrix/php_interface/init.php.

<?php
AddEventHandler("main", "OnProlog", "CloseSiteForGuests");

/**
 * Закрывает доступ к публичной части сайта для неавторизованных пользователей.
 * Все авторизованные пользователи (любой группы) сохраняют доступ.
 */
function CloseSiteForGuests() {
    global $USER, $APPLICATION;

    // Получаем массив групп текущего пользователя
    $userGroups = $USER->GetUserGroupArray();

    // Группа "Все пользователи (в том числе неавторизованные)" имеет ID = 2
    $isNotAuthorized = (count($userGroups) == 1 && in_array(2, $userGroups));

    // Проверяем, что мы не в админке Битрикс
    $isAdminSection = (strpos($APPLICATION->GetCurPage(), '/bitrix/admin/') !== false);

    // Если пользователь не авторизован и не в админке — показываем заглушку
    if ($isNotAuthorized && !$isAdminSection) {
        require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/site_closed.php");
        die; // Останавливаем дальнейшее выполнение скрипта
    }
}
?>

Принцип работы и логика кода

  1. $USER->GetUserGroupArray() — получает список ID групп, к которым принадлежит текущий посетитель.
  2. Ключевая проверка: Неавторизованный пользователь (гость) всегда состоит ровно в одной группе — "Все" (ID=2). Если count($userGroups) == 1 и эта единственная группа — группа "Все", значит, перед нами гость.
  3. Исключение админки: Важно убедиться, что мы не блокируем доступ к самой админке Битрикс (/bitrix/admin/). Это проверяется с помощью strpos(...) === false.
  4. Вывод заглушки: Если оба условия соблюдены, подключается ваш файл site_closed.php, и выполнение скрипта прекращается (die).

Заключение

Такое решение позволяет гибко управлять доступом к сайту во время разработки или тестирования. Вы можете показывать сайт только зарегистрированным пользователям, не трогая административную панель. Код не требует изменения ядра, легко отключается и не влияет на производительность при обычной работе сайта.

Хотите освоить SQL для работы с данными?

В SQLka можно изучать SQL последовательно или готовиться к собеседованиям. Запросы выполняются прямо в браузере — устанавливать базу данных не нужно.

sqlka.ru

support@sqlka.ru

Дальше по теме

1С-Битрикс

Логирование в 1С-Битрикс: полное руководство для разработчика

Полное руководство по логированию в 1С-Битрикс: какие логгеры есть, как их настроить, форматировать сообщения и подключать к своим классам. Примеры кода и советы по использованию PSR-3

sqlka.ruЧтение: 4 мин.
← Все статьи