Как дать права на подсистему из расширения пользователю с полными правами в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При разработке расширений в среде «1С:Предприятие 8.3» программисты часто сталкиваются со странным поведением прав доступа. Типичная ситуация: в расширение добавляется новая подсистема и несколько прикладных объектов (справочники, документы). Однако пользователи с ролью «Полные права» неожиданно перестают видеть эти объекты в интерфейсе. Попытки выдать права через создание новой роли внутри расширения приводят к тому, что обычные пользователи начинают видеть интерфейс, а администраторы системы — по-прежнему нет.

В этой статье мы подробно разберем внутренние механизмы платформы 1С и Библиотеки стандартных подсистем (БСП), выясним причину такого поведения и рассмотрим надежные, безопасные способы решения этой проблемы.

Почему новые объекты расширения исчезают для администраторов?

Для того чтобы понять суть проблемы, нам необходимо проанализировать два ключевых фактора: логику работы самой платформы «1С:Предприятие» при работе с расширениями и алгоритмы автоматического управления доступом БСП.

Рассмотрим первый фактор — поведение платформы 1С. В системе действует жесткое правило инициализации безопасности для расширений:

  1. В расширении нет ни одной собственной роли. В этом случае платформа автоматически предоставляет доступ ко всем новым объектам расширения (включая подсистемы) всем пользователям, у которых есть базовые права в основной конфигурации.
  2. В расширении создается хотя бы одна роль. Как только вы добавляете первую роль в расширение, платформа кардинально меняет логику безопасности. Теперь все новые объекты расширения по умолчанию считаются закрытыми. Чтобы получить к ним доступ, пользователю должна быть явно назначена роль именно из этого расширения. Это ограничение распространяется в том числе и на пользователей с «Полными правами» в основной конфигурации.

Теперь проанализируем второй фактор — поведение БСП в режиме «1С:Предприятие». Программа «1С:Бухгалтерия» (как и другие конфигурации на БСП) использует автоматический механизм синхронизации прав. Когда вы пытаетесь назначить роль расширения администратору через профили групп доступа, система БСП выполняет очистку.

При запуске регламентных заданий обновления или изменении прав срабатывает процедура УправлениеДоступомСлужебный.ОбновитьРолиПользователей(). С точки зрения БСП, пользователю с полными правами не требуются никакие дополнительные прикладные роли. Поэтому программный механизм принудительно удаляет (снимает галочки) со всех дополнительных ролей у пользователей-администраторов в Конфигураторе.

Если разработчик решает проблему «в лоб» — просто заходит в Конфигуратор и вручную проставляет галочку нужной роли расширения в карточке администратора — это сработает лишь временно. При первой же синхронизации или обновлении информационной базы БСП сотрет эти настройки, и подсистема снова исчезнет. При работе с большим количеством инфобаз архивирование, обновление и тестирование 1С можно запустить по расписанию в автоматическом режиме.

Выяснив причины проблемы, перейдем к рассмотрению надежных архитектурных способов её решения.

Способ 1. Заимствование типовой роли «ПолныеПрава» (Рекомендуемый метод)

Если вам требуется, чтобы новая подсистема и объекты расширения были видны абсолютно всем администраторам системы без исключения, то создавать отдельную роль для этого не нужно. Мы можем использовать стандартную роль конфигурации.

Разберем этот процесс по шагам:

  1. Откройте конфигуратор вашей базы данных и перейдите в дерево объектов расширения.
  2. Найдите в основной конфигурации роль с именем ПолныеПрава (или аналогичную системную роль администратора, например, АдминистраторСистемы).
  3. Нажмите на неё правой кнопкой мыши и выберите команду «Добавить в расширение».
  4. В дереве объектов расширения перейдите к заимствованной роли ПолныеПрава.
  5. Установите для этой роли права (как минимум Чтение и Просмотр) на вашу новую подсистему и прикладные объекты расширения.

Поскольку роль ПолныеПрава назначена администраторам на уровне платформы в основной конфигурации, БСП никогда ее не отменит. Все права, которые вы добавили к ней внутри расширения, автоматически и стабильно применятся ко всем пользователям с полными правами.

Способ 2. Использование специальных суффиксов БСП для имен ролей

Что делать, если вам критически важно управлять видимостью подсистемы и выдавать её лишь некоторым администраторам выборочно через профили групп доступа? В БСП предусмотрено легитимное исключение из правил очистки ролей.

Алгоритмы БСП не удаляют у администраторов роли, имена которых оканчиваются на определенные ключевые слова-суффиксы. К ним относятся:

Рассмотрим, как применить это на практике. Назовите вашу новую роль в расширении с использованием одного из этих суффиксов, например: ИмяВашегоРасширения_ОбщиеПрава или ИмяВашегоРасширения_ПолныеПрава. Назначьте этой роли права на вашу подсистему.

Теперь вы можете спокойно создать профиль групп доступа в режиме «1С:Предприятие», включить туда эту роль и назначить профиль пользователю с полными правами. Механизм БСП распознает суффикс роли как разрешенный для администратора и не станет сбрасывать его при обновлении информационной базы.

Способ 3. Программное добавление роли в список исключений БСП

Если по каким-то причинам вы не хотите менять имя роли и использовать стандартные суффиксы, можно внести изменения в код механизмов обновления прав БСП с помощью самого расширения.

Для этого нам необходимо переопределить поведение заполнения разрешенных ролей. Выполним следующие действия:

  1. Заимствуйте в расширение общий модуль УправлениеДоступомСлужебный (или соответствующий переопределяемый модуль вашей версии БСП).
  2. Найдите процедуру, отвечающую за сбор ролей администраторов (обычно это ПриЗаполненииРолейАдминистратора или аналогичные методы внутри процедуры ОбновитьРолиПользователей).
  3. Внедрите в эту процедуру аннотацию &После или &Вместо и добавьте вашу роль расширения в список разрешенных исключений.

Пример программного кода для добавления роли в исключения:


Процедура ИмяВашегоРасширения_ПриЗаполненииРолейАдминистратора(ДополнительныеРолиАдминистратора) Экспорт
    // Добавляем имя нашей роли в структуру исключений БСП
    ДополнительныеРолиАдминистратора.Вставить("ИмяВашейРолиИзРасширения", Истина);
КонецПроцедуры

Благодаря этому коду автоматический фоновый процесс синхронизации прав перестанет воспринимать вашу роль как «лишнюю» для администратора и сохранит её при каждом обновлении прав.

Способ 4. Архитектурное разделение прав пользователей

Проанализируем ситуацию с точки зрения методологии безопасности 1С. Использование роли «Полные права» для повседневной работы пользователей, даже если это ключевые сотрудники или руководство предприятия, является небезопасной практикой.

Если вам требуется ограничить видимость подсистемы расширения для части пользователей, которые сейчас работают под полными правами, лучшим решением будет отказ от роли «Полные права» на уровне платформы для этой группы лиц. Рекомендуется действовать по следующей схеме:

  1. Создайте в режиме «1С:Предприятие» новый профиль групп доступа (например, «Старший бухгалтер с расширенными функциями»).
  2. Наполните этот профиль всеми необходимыми поставляемыми ролями конфигурации, которые обеспечивают широкие прикладные права, но не включают права непосредственного администрирования системы.
  3. Добавьте в данный профиль вашу новую роль из расширения.
  4. Назначьте этот профиль нужным пользователям.

Поскольку у этих пользователей на уровне платформы больше не будет роли «Полные права», механизмы БСП будут стандартным и штатным образом управлять их доступом, не накладывая ограничений на очистку ролей расширения.

Используя один из предложенных выше системных подходов, вы сможете навсегда решить проблему исчезновения подсистем из расширения и настроить права доступа в строгом соответствии со стандартами разработки фирмы «1С».

← На главную