Настройка прав доступа в современных конфигурациях «1С:Предприятие», разработанных на базе Библиотеки стандартных подсистем (БСП), принципиально отличается от старых версий платформы. Попытка просто создать одну глобальную роль в Конфигураторе, отметить в ней «все галочки» и назначить пользователю напрямую, как правило, приводит к лавине ошибок при запуске системы или при попытке открыть простейшие документы.
В этой статье мы подробно разберем, почему возникает такая проблема, как устроена подсистема управления доступом БСП «под капотом» и как правильно настроить права для пользователей в доработанной конфигурации «1С:Управление торговлей».
Рассмотрим ситуацию: вы создали в Конфигураторе новую роль (назовем ее РольТест), установили в ней полные права на все объекты метаданных и назначили пользователю. Однако при входе в систему или при проведении документов (например, «Реализация товаров и услуг») программа выдает ошибку недостатка прав. Выясним основные причины этого поведения.
1. Жесткие программные проверки в коде (метод РольДоступна)
Разработчики типовых решений часто завязывают логику интерфейса и проведения документов на наличие у пользователя конкретных предопределенных ролей. В кодовой базе это реализуется через функции РольДоступна() или вызовы методов БСП УправлениеДоступом.ЕстьРоль(). Например, при открытии формы документа «Реализация товаров и услуг» система может выполнять следующую проверку:
Если Не РольДоступна("ДобавлениеИзменениеРеализацийТоваровУслуг") Тогда
ДоступностьКнопокПроведения(Ложь);
ВызватьИсключение "Недостаточно прав для выполнения операции!";
КонецЕсли;
Даже если ваша кастомная РольТест имеет полные права на объект метаданных Документ.РеализацияТоваровУслуг на уровне СУБД, у пользователя физически отсутствует конкретная роль ДобавлениеИзменениеРеализацийТоваровУслуг. Программный код системы считает, что прав нет, и блокирует работу.
2. Отсутствие системных (базовых) ролей
Для того чтобы сеанс пользователя вообще мог инициализироваться, платформе и БСП требуется доступ к множеству служебных объектов: константам, параметрам сеанса, общим формам, служебным регистрам сведений. Без них конфигурация аварийно завершит работу еще до открытия главного окна. За доступ к этим объектам отвечают специальные базовые роли, такие как БазовыеПраваБСП, БазовыеПраваУТ, ЗапускКлиентскихПриложений и другие. Назначать эти права вручную в своей новой роли крайне неэффективно и трудозатратно.
Проанализируем архитектуру управления доступом БСП. В современных конфигурациях 1С разработчики и администраторы не назначают роли пользователям напрямую в Конфигураторе. Вся работа ведется в режиме «1С:Предприятие» через справочники Профили групп доступа и Группы доступа.
Для ускорения работы системы БСП кэширует структуру метаданных конфигурации. Ключевым звеном здесь является служебный справочник ИдентификаторыОбъектовМетаданных. Когда вы добавляете новую роль в Конфигураторе, база данных в режиме Предприятия еще «не знает» о её существовании, так как в кэше БСП нет соответствующей записи. Соответственно, вы не сможете добавить эту роль в профиль групп доступа, пока не обновите служебные данные.
Для обновления этого кэша используется специальный механизм. Запустить его можно двумя способами:
/C ЗапуститьОбновлениеИнформационнойБазы.
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина);
Если ваша конфигурация «1С:Управление торговлей» сильно доработана (добавлены новые документы, справочники, регистры), создавать одну мега-роль поверх системы — это тупиковый путь. Правильный подход основан на концепции «атомарных» ролей. Каждая роль должна отвечать за строго определенное минимальное действие.
Рассмотрим по шагам, как правильно настроить доступ:
Не нужно дублировать в своей роли права на типовые объекты. Создайте новую роль (например, ДобавлениеИзменениеДоработанныхОбъектов) и отметьте в ней права только на ваши новые, добавленные в процессе кастомизации объекты метаданных (документы, справочники, регистры).
После сохранения конфигурации и обновления базы данных запустите систему с ключом обновления:
"C:\Program Files\1cv8\...\1cv8.exe" ENTERPRISE /F "ПутьКБазе" /N "Администратор" /P "Пароль" /C ЗапуститьОбновлениеИнформационнойБазы
Это заставит БСП пересчитать кэш метаданных и внести вашу новую роль в справочник ИдентификаторыОбъектовМетаданных.
Теперь перейдите в интерфейс «1С:Предприятие» под учетной записью администратора:
Базовые права, Базовая функциональность.Добавление и изменение реализаций товаров и услуг, Чтение партнеров).ДобавлениеИзменениеДоработанныхОбъектов.Перейдите в справочник Группы доступа, создайте новую группу (или откройте существующую), выберите созданный на Шаге 3 профиль и добавьте в список участников нужного пользователя. При записи группы доступа БСП сама программно назначит пользователю весь собранный пакет ролей непосредственно в Конфигураторе.
Стоит учитывать важный нюанс работы БСП с администраторами системы. Если пользователю назначается предопределенная группа доступа «Администраторы» (или напрямую в Конфигураторе выдается роль ПолныеПрава):
РольДоступна(), разработчики БСП используют функции общих модулей. Метод Пользователи.РолиДоступны() при наличии у пользователя полных прав всегда принудительно возвращает значение Истина, предотвращая ложные срабатывания проверок.Использование описанной методики гарантирует стабильную работу системы прав, корректное прохождение программных проверок в коде и исключает проблемы при последующих обновлениях вашей конфигурации «1С:Управление торговлей».