Перейти к содержимому

Роли менеджеров - что видит и что может в админке

Собираем роли сотрудников вместо выдачи полного доступа: разбираем, из чего складываются права и почему «дадим админа, потом уберём» не работает.

Решение

Смотрим, что у групп уже есть:

global $APPLICATION;
// идентификаторы групп смотрят в настройках, они у каждого проекта свои
foreach ([2 => 'Все', 5 => 'Контент', 6 => 'Заказы'] as $groupId => $name) {
printf("%-10s main=%s iblock=%s sale=%s\n", $name,
$APPLICATION->GetGroupRight('main', [$groupId]),
$APPLICATION->GetGroupRight('iblock', [$groupId]),
$APPLICATION->GetGroupRight('sale', [$groupId]));
}
// D - запрет, R - чтение, W - полный доступ к модулю

Права в платформе выдаются группе, а не человеку. Роль - это набор прав у группы, и сотрудник получает её включением в группу, а не отдельной настройкой под себя.

Собираем роль контент-менеджера:

$APPLICATION->SetGroupRight('main', 5, 'R'); // вход в административную часть
$APPLICATION->SetGroupRight('iblock', 5, 'W'); // работа с инфоблоками
$APPLICATION->SetGroupRight('fileman', 5, 'W'); // страницы и файлы

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

Собираем роль менеджера заказов:

$APPLICATION->SetGroupRight('main', 6, 'R');
$APPLICATION->SetGroupRight('sale', 6, 'W');
// у модуля продаж есть свои роли: их назначают на вкладке прав самого модуля

У модуля продаж есть свой набор ролей поверх общего права. Менеджеру обычно нужна роль с правом видеть и менять заказы, но без настроек магазина, и собирается она именно там, а не общим полным доступом.

Проверяем, что получилось:

$user = new CUser();
printf("админ=%s права sale=%s\n",
$USER->IsAdmin() ? 'да' : 'нет', $APPLICATION->GetGroupRight('sale'));
// проверять надёжнее входом под сотрудником, а не чтением настроек

Проверяют здесь не настройки в форме, а полученный результат. Вход под учётной записью сотрудника показывает реальный набор пунктов меню и кнопок, и половина неожиданностей обнаруживается именно так.

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

Полный доступ «на время» остаётся навсегда. Выданное в аврале право никто не снимает, и через год половина сотрудников оказывается администраторами - проверять список стоит регулярно, а не после происшествия.

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

Типичные проблемы

Сотрудник видит меню, но не видит данных.

Есть право на модуль, но нет прав на конкретный инфоблок. Права на сами данные выдаются отдельно от прав на весь модуль.

Менеджер не может войти в админку.

У группы нет права на модуль ядра. Вход в административную часть - это отдельное право, а не следствие остальных.

Менеджеру заказов видны настройки магазина.

Выдан полный доступ к модулю вместо подходящей роли. У модуля продаж есть свои отдельные роли с более узкими правами.

Права сотрудника отличаются от коллег.

Права выданы конкретному человеку помимо групп. Роль собирают именно группой, иначе она нигде не воспроизводится.

Половина сотрудников - администраторы.

Полные права выдавались «на время» и потом уже не снимались. Список администраторов сайта стоит проверять регулярно.

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

Можно ли скрыть один пункт меню админки?

Обычно нет: меню собирается из прав на модули. Убрать пункт - значит убрать право на модуль целиком.

Как дать доступ к одному инфоблоку?

Правом на модуль инфоблоков плюс правами на этот инфоблок. Остальные инфоблоки при этом остаются закрытыми.

Что делать при увольнении сотрудника?

Выключать запись, а не удалять: история правок и заказов ссылается на неё. Права снимаются вместе с выключением.

Нужна ли отдельная группа под подрядчика?

Да, со сроком и с минимальными правами. Общая группа «Разработчики» переживает несколько подрядчиков подряд.

Смежное

Первоисточник