Битрикс — как закрыть публичную часть сайта для доступа?

В этот раз поговорим немного о 1C-Bitrix. Про эту систему написано много, как плохого, так и хорошего, но сейчас не об этом. Эта статья первая их серии как о системе в целом, так и о способах решения конкретных проблем. В качестве подопытного будем использовать 15 версию Битрикса. В данном случае рассмотрим задачу закрытия публичной части сайта.

Ограничение доступа к публичной части сайта используется на этапах разработки сайта, когда доступ к нему сторонних пользователей нежелателен ввиду преждевременной публикации промежуточных результатов и, в некоторых случаях, негативного восприятия незавершенного проекта. Какие инструменты для этого нам предлагает Битрикс?

Самый простой способ — это закрыть публичную часть через панель администрирования. Для этого заходим в «Настройки» -> «Настройки продукта» -> «Настройки модулей» -> «Главный модуль» -> блок «Служебные процедуры» -> вкладка «Публичная часть» -> кнопка «Закрыть доступ для посетителей».

Закрыть публичную часть сайта в Битрикс

После нажатия на заветную кнопку доступ к публичной части будут иметь только пользователи, имеющие полный доступ к главному модулю. Если права доступа групп пользователей после установки системы не изменялись, то доступ к публичной части будут иметь только пользователи из группы «Администраторы». К слову, если вы разлогинились, то что бы попасть в панель администрирования достаточно дописать к адресу вашего сайта /bitrix/admin/.

Для всех остальных пользователей, как зарегистрированных, так и незарегистрированных, будет показываться заглушка. Если ее необходимо стилизовать под дизайн сайта, то это можно сделать в файле site_closed.php, который находится в /bitrix/modules/main/include/.

Но что, если нужно закрыть публичную часть сайта для доступа только незарегистрированных пользователей? Например, доступ к публичной части не помешал бы контент-менеджеру, а в некоторых случаях и заказчику. Но использовать для этих целей права доступа группы «Администраторы» нецелесообразно по ряду причин, главная из которых — вмешательство в процесс разработки сайта. Даже если мы создадим для таких пользователей отдельную группу, все равно придется выставить полный доступ к главному модулю, т.е. данный способ проблему не решает.

Для того, что бы решить поставленную задачу нам необходимо отредактировать файл prolog_after.php, находящийся в /bitrix/modules/main/include/. Ищем 68 строчку и условие if(COption::GetOptionString("main", "site_stopped", "N")=="Y" && !$USER->CanDoOperation('edit_other_settings')) по которому отображается заглушка вместо публичной части сайта. Тут нас интересует часть !$USER->CanDoOperation('edit_other_settings'), условие по которой выполняется, если пользователь не имеет полный доступ к главному модулю. Для того, что бы открыть доступ для всех зарегистрированных пользователей нужно всего лишь заменить значение edit_other_settings («Полный доступ») на edit_own_profile («Изменение своего профиля»).

Но что, если и этого нам не достаточно и необходима более точная настройка доступа? Аналогичным образом можно подставить любое другое значение доступа. Значения можно найти в БД в таблице b_operation, перечень уровней доступа в таблице b_task, связующая таблица b_task_operation. CanDoOperation — это метод класса CUser модуля main, так же можно использовать другие методы класса, описание которых можно найти в официальной документации для разработчиков, а также используя модуль «Живое описание АПИ» или его онлайн-версию.