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