1С Битрикс · 6 мин чтения

Битрикс пользователи: группы, права и свои поля профиля

Каждый проект на Битриксе, где кроме витрины появляется личный кабинет, партнёрский раздел или закрытый прайс, упирается в один и тот же вопрос: как управлять пользователями так, чтобы не превратить админку в помойку из полного доступа для всех. Я регулярно донастраиваю права и поля профиля на чужих проектах, где изначально всем сотрудникам выдали группу «Администраторы», а потом удивляются, почему менеджер по продажам может удалить инфоблок с товарами. Дальше по порядку: как устроены пользователи в Битриксе на уровне групп и прав, как добавить свои поля в профиль и куда смотреть, если синхронизация с CRM ломает импорт.

Как устроены пользователи в Битриксе на уровне ядра

Каждый пользователь в системе это запись в таблице b_user, за работу с которой отвечает класс CUser. Кроме стандартных полей вроде логина, email и ФИО у записи есть привязка к одной или нескольким группам через таблицу b_user_group. Права считаются не для конкретного человека, а для группы: если пользователь состоит сразу в двух группах, ему достаются права по максимальному значению из обеих. Это первое, что стоит проверить, если доступ ведёт себя неожиданно, обычно проблема в том, что человека забыли убрать из старой группы при переводе в новую.

Отдельно стоит развести понятия: группа пользователей на сайте и роль в Битрикс24 это разные вещи из разных продуктов. Если сайт на 1С-Битрикс интегрирован с Битрикс24 через REST, права на сайте и права в CRM настраиваются независимо друг от друга.

Группы пользователей и права доступа: где настраивать

Группы создаются в разделе Настройки -> Пользователи -> Группы пользователей. По умолчанию в системе две группы, и удалить их нельзя: «Все пользователи (в том числе неавторизованные)», куда попадают все посетители сайта, и «Администраторы» с полным доступом к управлению сайтом. Под свои задачи обычно добавляю ещё «Контент-менеджеры», «Партнёры B2B» или похожие.

На вкладке «Доступ» у каждой группы настраиваются уровни прав доступа к модулям системы, причём набор уровней зависит от модуля: например, для «Управления структурой» это «Редактирование файлов и папок». Для инфоблоков права можно уточнить ещё точнее, зайдя в настройки самого инфоблока на вкладку «Доступ» и указав уровень для группы не на весь модуль, а на конкретный инфоблок или даже раздел внутри него.

Группа Права на модуль «Пользователи» Права на инфоблоки контента Доступ в административную часть
Администраторы Полный доступ Полный доступ Да
Контент-менеджеры Запрещён Изменение своего раздела Да, ограниченно
Партнёры B2B Запрещён Чтение закрытого прайса Нет
Неавторизованные Запрещён Чтение публичных разделов Нет

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

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Свои поля профиля пользователя: когда и как добавлять

Свои поля добавляются на странице Настройки -> Настройки продукта -> Пользовательские поля, кнопка «Добавить». Второй штатный способ - ссылка «Добавить пользовательское свойство» прямо в форме редактирования пользователя. Код поля принято начинать с UF_, дальше система сама подставит его в форму регистрации и в профиль на публичной части, если она использует стандартный компонент вывода профиля без переопределения шаблона.

Из типов полей чаще всего беру: строка, число, да/нет, список с вариантами, файл, дата или дата и время, привязка к элементам справочника через HL-блок. На практике добавлял UF_BIRTHDAY для программы лояльности, чтобы отправлять промо ко дню рождения, UF_COMPANY и UF_INN в B2B личном кабинете, чтобы не спрашивать реквизиты при каждом заказе, и файловое поле для скана документа в партнёрской программе, где нужна верификация перед первой выплатой.

Если форма профиля на сайте кастомная и не берёт поля из стандартного компонента, новое UF-поле в вёрстке само не появится, его нужно добавить в шаблон отдельно. Читать и писать значение поля из кода можно через обычный CUser:

<?php
$rsUser = CUser::GetByID($USER->GetID());
$arUser = $rsUser->Fetch();
echo $arUser["UF_COMPANY"];

$user = new CUser;
$fields = array(
    "UF_COMPANY" => "ООО Ромашка",
);
$user->Update($USER->GetID(), $fields);
?>

Права на модули и разделы административной панели

Кроме прав на контент есть права на сами разделы админки. Группе можно дать доступ только к нужным модулям, например «Информационные блоки» и «Интернет-магазин», без модуля «Пользователи» и без «Настроек» - тогда пункт меню с группами и правами человек просто не увидит в списке.

Форма группы состоит из трёх вкладок: «Параметры», «Безопасность» и «Доступ». Привязка к IP лежит на «Безопасности» и запрещает не вход, а использование сессии и сохранённой авторизации с чужого адреса: поля «Маска сети для привязки сессии» и «Маска сети для привязки сохраненной авторизации». Это помогает для «Партнёров» или «Бухгалтерии», если они всегда заходят с одного офисного адреса. Если матрица прав получается сложной, а групп в проекте много, обычно быстрее сразу обсудить структуру на консультации по настройке прав доступа, чем потом разгребать, кто и почему видит лишнее.

Импорт и синхронизация пользователей с CRM

Частый сценарий: у клиента есть CRM, будь то Битрикс24, amoCRM или самописная система, и при регистрации на сайте контакт нужно продублировать туда. Для этого в модуле «Пользователи» есть события OnBeforeUserAdd, если нужно провалидировать данные до создания записи, и OnAfterUserAdd, чтобы отправить готовый контакт дальше уже после успешной регистрации.

<?php
AddEventHandler("main", "OnAfterUserAdd", "syncUserToCrm");

function syncUserToCrm($arFields)
{
    $data = array(
        "NAME"  => $arFields["NAME"],
        "EMAIL" => $arFields["EMAIL"],
        "PHONE" => $arFields["PERSONAL_PHONE"],
    );

    $ch = curl_init("https://your-crm.example.com/api/contacts");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);
    curl_close($ch);
}
?>

Если контакты уходят во внешнюю систему, держите её на серверах в РФ - выгружать персональные данные пользователей в зарубежные облачные таблицы нельзя, это прямое требование локализации по 152-ФЗ.

При переносе базы со старого сайта обычный csv-импорт через админку тянет основные поля и группы, но не всегда подхватывает кастомные UF-поля и историю входов. Такой перенос надёжнее делать отдельным скриптом через CUser::Add с явной передачей всех значений, включая UF-поля, и с проверкой, что группы на новом сайте называются и весят так же, как на старом.

Частые ошибки при настройке прав

  • всем сотрудникам выдают группу «Администраторы» вместо точечных прав, а потом менеджер случайно чистит рабочий каталог товаров;
  • права тестируют только под своей учёткой с полным доступом, а не под живым пользователем нужной группы;
  • забывают закрыть от группы «Все пользователи» разделы, которые должны быть видны только авторизованным;
  • хранят чувствительные данные вроде сканов документов в обычных UF-полях без ограничения прав на просмотр самого поля;
  • при переносе пользователей забывают перенести привязку к группам, и все попадают в группу по умолчанию без нужных прав.

1С-Битрикс регулярно обновляется, поэтому перед внедрением я сверяюсь с актуальной документацией.

Частые вопросы

Как ограничить доступ пользователей к разделу сайта в Битриксе?

Создайте отдельную группу под этот раздел, привяжите к ней нужных пользователей и на вкладке «Доступ» в настройках инфоблока или раздела выставьте для неё уровень «Чтение» или «Изменение», а для группы «Все пользователи» на этот же раздел поставьте «Запрещён».

Можно ли добавить пользователю несколько своих полей без правки шаблона?

Да, поля добавляются через Настройки -> Настройки продукта -> Пользовательские поля, и стандартные компоненты профиля и регистрации подхватывают их автоматически. Правка шаблона нужна, только если форма профиля переопределена под дизайн и не использует стандартный вывод полей через компонент.

Как перенести пользователей на новый сайт вместе с их правами?

Стандартный экспорт и импорт через админку переносит основные поля и группы, но не всегда переносит UF-поля и историю входов. Надёжнее писать перенос через CUser::Add и CUser::Update с явным маппингом всех полей, включая кастомные, и заранее свериться, что группы на новом сайте совпадают со старыми по названию и по правам.

Чем группа пользователей в 1С-Битрикс отличается от роли в Битрикс24?

Группа пользователей это сущность модуля «Пользователи» на сайте, она управляет доступом к разделам и модулям самого сайта. Роль в Битрикс24 живёт в отдельном продукте и системе CRM, отвечает за доступ к сделкам, лидам и отчётам внутри портала. Это две независимые системы прав, которые при интеграции через REST приходится синхронизировать вручную под конкретную задачу.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно