При разработке расширений для типовых конфигураций (например, Бухгалтерия предприятия 3.0) разработчики часто сталкиваются с необходимостью создания новых ролей. Одной из самых трудоемких задач является обеспечение прав доступа на чтение существующих объектов метаданных. Если мы создаем роль в расширении, она не сможет дать права на объект основной конфигурации, пока этот объект не будет добавлен в само расширение. Когда таких объектов (например, регистров сведений) сотни, ручное добавление превращается в рутину, отнимающую часы работы. Разберем, как автоматизировать этот процесс и какие архитектурные подходы помогут избежать проблем при обновлениях.
Рассмотрим ситуацию: пользователю для работы с документом РеализацияТоваровУслуг требуется доступ к множеству связанных регистров сведений. Платформа 1С устроена так, что если вы используете роль из расширения, то для назначения прав чтения, просмотра или редактирования объект должен присутствовать в дереве метаданных расширения. Проблема усугубляется при обновлении конфигурации: вендор добавляет новые регистры, которые начинают использоваться в коде проведения или открытия форм, и ваша роль в расширении тут же «ломается», так как у пользователя пропадают права на новые объекты.
Проанализируем основные способы решения этой задачи, от стандартных инструментов до продвинутой автоматизации.
Если стандартный «Конфигуратор» заставляет нас добавлять каждый объект по отдельности через контекстное меню, то среда разработки EDT предоставляет гораздо более гибкие инструменты массового управления метаданными. Посмотрим, как это сделать:
Shift или Ctrl, выделяем все необходимые регистры (или сразу всю ветку РегистрыСведений).EDT автоматически сформирует необходимые зависимости и добавит объекты в проект расширения. Это сокращает время работы с нескольких часов до пары минут. После этого в самой роли расширения можно так же массово установить флажки прав доступа.
В современных конфигурациях на базе БСП (Библиотека стандартных подсистем), таких как БП 3.0 или ERP, часто эффективнее не плодить роли в расширении, а использовать механизмы Профилей групп доступа. Выясним, почему это лучше:
Вместо того чтобы тянуть все регистры в расширение ради прав, мы можем программно модифицировать существующие профили или создавать новые на уровне данных (в режиме «1С:Предприятие»). Если задача состоит в том, чтобы дать право только на чтение всех регистров, можно воспользоваться стандартной ролью ЧтениеНизкоуровневыхОбъектов или аналогичными системными ролями, которые уже имеют доступ к большинству технических регистров.
Для добавления прав на новые объекты, которые появляются после обновлений, можно написать небольшую обработку, которая будет выполняться при обновлении информационной базы:
Процедура ДобавитьПраваНаРегистры(ИмяПрофиля)
ПрофильОбъект = Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию(ИмяПрофиля).ПолучитьОбъект();
// Логика добавления ролей, содержащих права на чтение всех регистров
// Например, добавление типовой роли "ЧтениеДанныхБухгалтерии"
НоваяСтрока = ПрофильОбъект.Роли.Добавить();
НоваяСтрока.Роль = Метаданные.Роли.ЧтениеНизкоуровневыхОбъектов;
ПрофильОбъект.Записать();
КонецПроцедуры
Для тех, кто предпочитает полную автоматизацию, существует метод прямой манипуляции файлом расширения (.cfe). Структура расширения может быть выгружена в набор XML-файлов. Проанализируем этот алгоритм:
ConfigDumpInfo.xml и создаем соответствующие папки в структуре выгрузки расширения.Этот метод позволяет гарантированно включить все регистры, существующие в системе, без риска пропустить какой-либо из них вручную.
Рассмотрим несколько критических моментов, которые влияют на стабильность системы:
Вместо того чтобы пытаться объять необъятное и добавлять все регистры «с запасом», мы рекомендуем следующий алгоритм действий:
Шаг 1: Создайте в расширении роль, которая дает права только на специфические объекты, добавленные вами лично.
Шаг 2: Для доступа к типовым регистрам используйте стандартные роли основной конфигурации (например, роли группы Чтение...), объединяя их в одном Профиле групп доступа с вашей новой ролью из расширения.
Шаг 3: Если вы все же решили добавлять объекты массово — используйте EDT как наиболее быстрый и современный инструмент визуального проектирования метаданных.
Такой подход обеспечит чистоту конфигурации, высокую скорость работы и отсутствие проблем при плановых обновлениях 1С:Бухгалтерии.