Рассмотрим весьма распространенную ситуацию, с которой сталкиваются разработчики при внедрении новых объектов в типовые конфигурации на базе Библиотеки стандартных подсистем (БСП). Предположим, мы создали отдельную подсистему и поместили туда новые документы. Для доступа к этим объектам была создана специальная роль. Если назначить эту новую роль рядовому (неполноправному) пользователю, система отрабатывает корректно: подсистема отображается, документы доступны.
Однако, проанализируем ситуацию дальше. Если попытаться дать эту же роль пользователю с правами администратора, происходит странное: доступ полностью исчезает. Новые объекты не видны даже через меню «Все функции». Привычное правило платформы «если разрешено хотя бы в одной роли, то разрешено во всех» здесь визуально перестает работать. Выясним причину этого явления и разберем по шагам, как правильно настроить права.
Если мы зайдем в режим 1С:Предприятие под полноправным пользователем и проверим активные роли в конфигураторе, то увидим, что наша новая роль попросту отключена. В списке доступных ролей остаются только две: АдминистраторСистемы и ПолныеПрава.
Дело в том, что в конфигурациях, построенных на базе БСП, заложен строгий идеологический принцип: типовая роль ПолныеПрава должна давать пользователю абсолютный доступ ко всем без исключения объектам метаданных. Назначение каких-либо дополнительных (ограничивающих или расширяющих) ролей полноправному пользователю алгоритмы БСП считают логической ошибкой.
Посмотрим на пример кода, который выполняет эту «очистку». БСП проверяет принадлежность пользователя к группе доступа «Администраторы» и запускает процедуру ОбновитьРолиПользователей в общем модуле УправлениеДоступомСлужебный. Там формируется жесткий список разрешенных ролей, а все остальные сносятся:
РолиАдминистратора = Новый Соответствие;
РолиАдминистратора.Вставить("ПолныеПрава", Истина);
Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
Если ИмяРолиАдминистратораСистемы <> "ПолныеПрава" Тогда
РолиАдминистратора.Вставить(ИмяРолиАдминистратораСистемы, Истина);
КонецЕсли;
КонецЕсли;
Теперь, когда мы понимаем механику работы библиотеки, рассмотрим несколько надежных способов решения этой задачи.
Этот подход является наиболее правильным с точки зрения стандартов разработки фирмы 1С. Разберем его суть. Права на все новые подсистемы, справочники, документы и регистры должны быть сразу включены в основную роль конфигурации — ПолныеПрава.
Созданная вами дополнительная роль должна назначаться исключительно неполноправным пользователям. Для администраторов наличие доступа к новым объектам должно обеспечиваться их основной базовой ролью. Таким образом, конфликта с механизмами БСП не возникнет, и доступ сохранится у всех нужных сотрудников.
Если доработка типовой роли нежелательна (например, конфигурация находится на жесткой поддержке, а все новые документы созданы в расширении), мы применим механизм перехвата процедур. Наша задача — внести новую роль в список исключений алгоритма БСП.
Для этого в расширении конфигурации необходимо перехватить процедуру ОбновитьРолиПользователей (в модуле УправлениеДоступомСлужебный). Проанализируем, что нужно добавить. В зависимости от версии БСП, мы должны добавить нашу роль в служебную структуру (например, ДополнительныеРолиАдминистратора или РолиАдминистратора).
Посмотрим на пример того, как это можно реализовать в расширении:
&После("ОбновитьРолиПользователей")
Процедура Расш1_ОбновитьРолиПользователей(...)
// Добавляем нашу роль в исключения, чтобы БСП ее не удаляла
ДополнительныеРолиАдминистратора.Вставить("ИмяВашейНовойРоли", Истина);
КонецПроцедуры
После применения этого кода алгоритмы БСП перестанут удалять указанную роль у пользователей из группы администраторов.
В новых версиях Библиотеки стандартных подсистем (начиная с линейки 3.1.x) появился более элегантный встроенный механизм сохранения прав, специально разработанный для расширений. Рассмотрим, как им воспользоваться.
Система автоматически распознает и не будет удалять вашу новую роль у пользователей с полными правами, если имя этой роли оканчивается на определенные ключевые суффиксы. Разберем наиболее частые из них. Достаточно назвать вашу роль так, чтобы она содержала окончание ...ПолныеПрава или ...ОбщиеПрава. В этом случае БСП поймет, что это глобальная административная роль из расширения, и оставит её активной.
Если вам требуется точечно управлять доступом и комбинировать роли без вмешательства в код конфигурации, рассмотрим альтернативный вариант настройки непосредственно в режиме 1С:Предприятие.
ПолныеПрава).Поскольку пользователь формально перестал быть системным администратором с точки зрения БСП (так как у него нет роли ПолныеПрава), библиотека больше не будет принудительно сбрасывать ему индивидуально настроенные права доступа.