- Предисловие
- Права и роли в ПО
- Операции и уровни доступа в 1С-Битрикс УС
- API для работы с операциями и уровнями доступа
- Привязки (BINDING)
Предисловие
В декабре 2011 года компания 1С-Битрикс выпустила Управление Сайтом 11.0.10, и вывела управление правами доступа собственных модулей на новый уровень. К “классической триаде” обязательных методов любого модуля (InstallDB, InstallEvents и InstallFiles) добавился еще один, мало кому из программистов сегодня известный — InstallTasks. О нем и всех его аспектах и пойдет сегодня речь, но сначала немного теории.Права и роли в ПО
Организация управления доступом на основе ролей (RBAC, Role Based Access Control) в ПО известна уже давно и в том или ином виде знакома большинству программистов. Почитать про нее можно в интернете, здесь же отметим ключевые ее особенности:- Каждому пользователю системы присваивается Роль;
- Каждая роль содержит набор Прав или Разрешений;
- При выполнении любых операций происходит проверка именно Прав и Разрешений.
Операции и уровни доступа в 1С-Битрикс УС
Сразу нужно запомнить — права в исходном коде УС называются не иначе как “operations” или “операции”, роли — “tasks” или “уровни доступа”. Управление операциями (их добавление или удаление) через панель управления невозможно — только через API системы (использование метода CModule::InstallTasks как раз является замечательным примером такого использования). А вот создание уровней доступа возможно не только через API, но и вручную, силами администратора или любого другого привилегированного пользователя по пути “Настройки->Пользователи->Уровни доступа”.![Уровни доступов в Битрикс](/upload/medialibrary/ee8/ee8c2fc6459aeb44308f5a41a570ee48.png.webp)
В БУС нельзя напрямую назначать конкретные права на операции конкретным пользователям (в полном соответствии c RBAC). Связь производится через два промежуточных звена — группы пользователя и уровни доступа. Проиллюстрируем эту связь ER-диаграммой.
![Группы пользователей и уровни доступов](/upload/medialibrary/2019-05-21_12-15-23.png.webp)
Заметка для любопытных: операции хранятся в таблице БД b_operation.
Для создания уровня доступа необходимо задать ему имя, выбрать модуль, который он описывает и дать права на выполнение необходимых операций в этом модуле. Один уровень доступа описывает операции только одного модуля! Дополнительно можно указать букву уровня доступа (символьный код) и описание. Традиционно в стандартных модулях БУС используются следующие символьные коды:
- D для полного запрета;
- R для чтения;
- W для записи;
- X для полного доступа.
Созданные и настроенные уровни доступа хранятся в таблице БД b_task и b_task_operation.
Остальные шаги должны быть известны большинству специалистов по работе с 1С-Битрикс УС: нужно поместить пользователя в нужную нам группу и этой группе задать нужный уровень доступа в нашем модуле.
Например, создадим такую группу пользователей, у которых будет единственная привилегия — сброс кеша в публичной части сайта. И ничего кроме.
Управление кешем — операция главного модуля (main). Букву для уровня создавать не будем.
![Управление КЭШем](/upload/medialibrary/c87/c87eec2339679f06484e4209279c90a3.png.webp)
![Операции при управлении кэшем](/upload/medialibrary/4f5/4f5db059f694b0d3029ea4621b16e4e3.png.webp)
![Редактирование групп](/upload/medialibrary/4a6/4a6061d955bdb5531b2425b6bfe0c1cd.png.webp)
![Сброс кэша на экране](/upload/medialibrary/f4c/f4c34511b4bed6d8e72718c23e6fd5de.png.webp)
API для работы с операциями и уровнями доступа
Чтобы ваш модуль при установке создал в системе нужные вам операции, необходимо внести следующие изменения в установщик вашего модуля (/bitrix/modules/<ваш модуль>/install/index.php):- в методе DoInstall вызвать метод InstallTasks (ну и в DoUninstall не забыть про UnInstallTasks);
- переопределить открытый метод GetModuleTasks. Пример кода из модуля Инфоблоков ниже.
![API для настройки доступов](/upload/medialibrary/35a/35a5cbf22772b9e679a460196c7bcd13.png.webp)
Установка модуля пройдет без проблем и Ваши уровни появятся в панели управления в общем списке. Только вот у них не будет названия и описания. Вернее, они будут, только в том же виде, в котором вы их объявили в методе: iblock_deny, iblock_read и т.д.
Перевод этих строк происходит в файлах модуля /admin/task_description.php (для перевода уровней доступа) и /admin/operation_description.php (для перевода операций).
Содержимое файлов простое, по сути они должны возвращать данные следующего вида:
![Возврат данных в работе модуля](/upload/medialibrary/965/965aa158ddd4bdeb9f539885b6f77e9c.png.webp)
Эти файлы подключаются автоматически и не требуют дополнительных хлопот.
Осталось только использовать эти права по назначению — организовать в модуле их проверку. Для этого есть системный булевый метод CUser::CanDoOperation. Чтобы получить все уровни, которые есть у пользователя, используйте метод CUser::GetAllOperations. Проверка прав использует кеширование в сессии пользователя, так что можно себя не ограничивать и не бояться порождать лишние запросы.
Небольшой пример: попробуем организовать доступ на сайте по следующей матрице прав.
![Матрица прав](/upload/medialibrary/504/504e3f056517c2d56e5b42c5aec9c1f3.png.webp)
Зная, что права могут поменяться, не будем при установке модуля создавать уровни доступа, только операции.
После анализа матрицы все выделенные операции объявляются в методе модуля GetModuleTasks.
![модуль GetModuleTasks](/upload/medialibrary/232/2324727be2f41c3d43e8e1d70fe512d4.png.webp)
![Установка прав управления](/upload/medialibrary/a59/a5945ad1beb2049dd9a00e92fc43a240.png.webp)
![Права управления](/upload/medialibrary/b15/b152c4c20c79c5a25cb6dc1c27b7033f.png.webp)
Привязки (BINDING)
Напоследок, вернемся к привязкам. Они не используются в совсем уж простых модулях — можно сказать, это продвинутый уровень.Обратите внимание на права доступа из модуля Инфоблоков (пример кода в предыдущем разделе). У каждого уровня привязка не к модулю, а к объекту iblock. Как следствие, на странице списка уровней доступа системы (“Настройки->Пользователи->Уровни доступа”) модуль инфоблоков вообще не представлен. Но любой достаточно оптыный специалист скажет, что где-то он уже видел настройку прав доступа для инфоблоков. Но где же?
Ответ прост — модуль инфоблоков дает возможность назначать права каждому инфоблоку персонально и видеть вы это могли на вкладке Доступ при редактировании любого инфоблока и хранятся эти настройки в собственной таблице b_iblock_group.
Получается, что стандартные уровни доступа (с привязкой к модулю) редактируются в стандартном разделе панели управления, а для работы с любыми другими объектами вам нужно создавать свои собственные разделы “админки”. Получается, в 1С-Битрикс УС есть не только продуманная и удобная система прав доступа, но и база для создания своей собственной.
Помощь и благодарности
Автор выражает благодарность Сергею Покоеву и Павлу Машанову. Именно наши разговоры об управлении доступом вдохновили меня на эту статью.Оцените статью
22.12.2014
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!
Статьи по теме
![](https://www.intervolga.ru/upload/resize_cache/iblock/b21/470_200_2/rs06edz4tsnd84peh9ewid244l8xb823.jpg.webp?w=1920)
![](https://www.intervolga.ru/upload/resize_cache/iblock/211/470_200_2/9nywq3jc4b1z786k822f2123kmp3bo8y.jpg.webp?w=1920)
![](https://www.intervolga.ru/upload/resize_cache/iblock/dfb/470_200_2/b80dhnr71r454q1nxq5wfui58z8cl96h.png.webp?w=1920)
![](https://www.intervolga.ru/upload/resize_cache/iblock/70c/470_200_2/vrpkumq2iy5yoxusqf6lltv1rtbtpt3g.png.webp?w=1920)
![](https://www.intervolga.ru/upload/resize_cache/iblock/43c/470_200_2/vkve9fdhzktft4pnqfihklq8yeefx0fm.png.webp?w=1920)
![](https://www.intervolga.ru/upload/resize_cache/iblock/8a7/470_200_2/0jhk9dv2tc48yqtnd1cc0dco5gw6p59l.png.webp?w=1920)
Мы работаем по одному из двух форматов:
- аренда команды (от 2 человек, не менее 3 месяцев);
- итерации с фиксированной ценой (1-3 месяца длительностью).
ИНТЕРВОЛГА предоставляет:
- регулярные онлайн-планерки с заказчиком;
- квалифицированных специалистов;
- организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
- полную прозрачность и регулярность отчетов о результатах.
Ключевые услуги:
- нагруженный интернет-магазин;
- личный кабинет;
- оптовые продажи — B2B-платформа;
- маркетплейс;
- технический аудит сайта;
- Битрикс24 — корпоративные HR-порталы;
- Битрикс24 — построение CRM-системы;
- Битрикс24 — личные кабинеты сотрудников;
- Битрикс24 — аудит портала;
- 1С — интеграция с другими системами;
- 1С — доработка системы;
- маркетинг — комплексное интернет-продвижение;
- маркетинг — продвижение для B2B.
Хотите получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишитесь на рассылку — спамить не будем