Права на инфоблок определяют, кто может смотреть, редактировать и удалять его содержимое. Без настройки контент-менеджер видит весь каталог целиком, а редактор новостей может случайно изменить цены на товары.
Разберём два режима прав — простой и расширенный, — их принципиальные отличия и порядок настройки, при котором доступ разграничивается по отделам без лишней возни.
Два режима прав
У инфоблока есть переключатель на вкладке доступа. От него зависит вся дальнейшая логика.
| Простые права | Расширенные права | |
|---|---|---|
| Уровень настройки | Только весь инфоблок | Инфоблок, раздел, элемент |
| Наследование | Нет | От раздела к вложенным |
| Гибкость | Низкая | Высокая |
| Нагрузка | Минимальная | Дополнительные проверки при выборках |
| Когда включать | Один ответственный за весь инфоблок | Разные люди отвечают за разные разделы |
Расширенные права включаются галочкой и обратно выключаются, но при переключении настройки не переносятся — их придётся задать заново. Решайте до того, как раздадите доступы.
Уровни доступа
Права выдаются группам пользователей, а не отдельным людям:
| Уровень | Что разрешает |
|---|---|
| Нет доступа | Инфоблок не виден вообще |
| Чтение | Просмотр без изменений |
| Документооборот | Изменения проходят через утверждение |
| Изменение элементов | Правка содержимого, но не структуры |
| Изменение разделов | Управление структурой разделов |
| Полный доступ | Всё, включая настройки инфоблока |
Отдельно отметим «Изменение элементов»: это самый подходящий уровень для контент-менеджера. Он может добавлять и править товары, но не сломает структуру каталога и не изменит свойства инфоблока.
Нужна помощь с Битрикс?
Настройка простых прав
- Откройте инфоблок и перейдите на вкладку доступа.
- Для каждой группы пользователей выберите уровень.
- Сохраните.
Обратите внимание на группу «Все пользователи (в том числе неавторизованные)». Ей нужно давать доступ на чтение — иначе инфоблок не будет виден на сайте посетителям. Это классическая причина ситуации «в админке товары есть, на сайте пусто».
Расширенные права
После включения расширенного режима права можно задавать отдельно для разделов. Работает наследование: вложенный раздел получает права родителя, если не задал свои.
Типичный сценарий для магазина с несколькими направлениями:
Каталог (инфоблок)
Мебель -> менеджеры мебели: изменение элементов
Кухни
Столы
Техника -> менеджеры техники: изменение элементов
Холодильники
Распродажа -> маркетологи: изменение элементов
Права задаются на трёх верхних разделах, вложенные наследуют их автоматически. Менеджер мебели не увидит раздел техники.
Права на отдельный элемент
Расширенный режим позволяет задать права и на конкретный элемент. Применяется редко — обычно для отдельных документов с ограниченным доступом. Для каталога это избыточно и заметно усложняет поддержку.
Права и группы пользователей
Права на инфоблок работают только вместе с правильно настроенными группами. Схема, которая обычно нужна:
| Группа | Доступ к инфоблокам |
|---|---|
| Администраторы | Полный ко всем |
| Контент-менеджеры | Изменение элементов в контентных инфоблоках |
| Менеджеры каталога | Изменение элементов в каталоге |
| Менеджеры заказов | Чтение каталога, работа с заказами |
| Все пользователи | Чтение публичных инфоблоков |
Настройка самих групп разобрана в статье Настройка групп пользователей в Битрикс, а общая механика доступа — в материале Права доступа в Битрикс.
Права в коде
При выборке элементов права учитываются автоматически — но только если явно не отключить проверку:
<?php
// с учётом прав текущего пользователя
$result = CIBlockElement::GetList(
[],
['IBLOCK_ID' => 5, 'CHECK_PERMISSIONS' => 'Y'],
false,
false,
['ID', 'NAME']
);
// без проверки прав — для служебных задач
$result = CIBlockElement::GetList(
[],
['IBLOCK_ID' => 5, 'CHECK_PERMISSIONS' => 'N'],
false,
false,
['ID', 'NAME']
);
Значение 'N' уместно в агентах, обмене с 1С и скриптах импорта,
где кода выполняется от системы. В коде публичной части его использовать не стоит:
так пользователь увидит то, что ему не положено.
Проверить право текущего пользователя можно напрямую:
<?php
$permission = CIBlock::GetPermission($iblockId);
// R — чтение, W — запись, X — полный доступ
if ($permission >= 'W') {
// пользователь может редактировать
}
Влияние на производительность
Расширенные права добавляют проверки при каждой выборке. На небольшом инфоблоке это незаметно, на каталоге с десятками тысяч товаров — вполне.
Что с этим делать:
- Не включайте расширенный режим без необходимости. Если весь каталог ведёт один человек, простых прав достаточно.
- Задавайте права на верхних разделах и полагайтесь на наследование вместо настройки каждого раздела.
- Не раздавайте права на отдельные элементы в больших каталогах.
- Кешируйте выборки. Но помните: в ключ кеша должны входить группы пользователя, иначе один увидит данные другого.
Частые ошибки
- Нет прав на чтение у неавторизованных. Товары есть в админке, но не выводятся на сайте.
- Всем выдан полный доступ «чтобы работало». Контент-менеджер однажды меняет настройки инфоблока, и каталог перестаёт выводиться.
-
CHECK_PERMISSIONS => 'N'в публичной части. Пользователи видят скрытые разделы. - Расширенные права включены без нужды. Лишняя нагрузка и усложнённая поддержка.
- Кеш без учёта групп. Первый зашедший наполняет кеш, и все получают его версию каталога.
- Права выданы конкретным людям, а не группам. При смене сотрудника всё приходится настраивать заново.
Итог
Права на инфоблоки настраиваются в двух режимах: простом — для всего инфоблока целиком, и расширенном — с разграничением по разделам и наследованием. Выдавать их нужно группам пользователей, а не отдельным людям.
Два пункта, которые дают больше всего проблем: отсутствие прав на чтение у группы неавторизованных пользователей — из-за чего каталог не виден на сайте, — и включение расширенного режима там, где он не нужен. Начинайте с простых прав и переходите к расширенным, только когда за разные разделы действительно отвечают разные люди.
