Почему в расширении слетают галочки назначения основной роли для пользователей и как это исправить?

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

В практике разработки расширений для типовых конфигураций 1С часто возникает ситуация, которая ставит в тупик даже опытных специалистов. Мы создаем расширение, добавляем в него новую роль, устанавливаем ее как "Основную роль" и в настройках управления расширениями (в режиме 1С:Предприятие или Конфигуратор) вручную назначаем эту роль конкретным пользователям. Всё работает отлично... день, два, иногда неделю. А затем права исчезают. Галочки напротив пользователей снимаются сами собой.

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

Суть проблемы: Платформа против БСП

Чтобы понять причину, нам нужно разделить два уровня управления правами в 1С:

  1. Уровень Платформы: Это базовый механизм. Платформа хранит список пользователей и назначенные им роли (в том числе роли из расширений) в системных таблицах базы данных. Когда мы заходим в "Функции для технического специалиста" -> "Управление расширениями" и ставим галочку напротив пользователя, мы работаем напрямую с этим уровнем.
  2. Уровень Прикладного решения (БСП): Большинство современных конфигураций (1С:Бухгалтерия, 1С:ERP, 1С:ЗУП и т.д.) построены на базе БСП. В БСП есть подсистема УправлениеДоступом. Она реализует более сложную логику через Справочники ГруппыДоступа и ПрофилиГруппДоступа.

Конфликт возникает из-за того, что БСП считает себя "единственным источником правды" в вопросах прав доступа. Подсистема управления доступом спроектирована так, чтобы права пользователя в базе данных (на уровне платформы) всегда соответствовали тому, что настроено в справочниках (на уровне предприятия).

Механизм "исчезновения" прав

Давайте проанализируем, что происходит "под капотом", когда у нас слетают галочки.

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

Алгоритм работы этого задания выглядит следующим образом:

  1. Система считывает список пользователей информационной базы.
  2. Для каждого пользователя она проверяет, в какие ГруппыДоступа он входит.
  3. На основании этих групп и связанных с ними ПрофилейГруппДоступа вычисляется эталонный список ролей, которые должны быть у пользователя.
  4. Система сравнивает эталонный список с реальным списком ролей пользователя (тем, что мы видим в Конфигураторе или таблице v8users).
  5. Ключевой момент: Если система находит роль (например, вашу роль из расширения), которая есть у пользователя фактически, но не предусмотрена ни одной группой доступа, она считает эту роль "ошибочной" или "лишней".
  6. В целях безопасности и поддержания целостности БСП удаляет эту роль у пользователя.

Именно поэтому галочки пропадают не сразу, а через некоторое время — когда запускается соответствующее регламентное задание или происходит событие записи пользователя.

Почему это затрагивает даже Администраторов?

В обсуждении темы было замечено, что проблема касается и пользователей с полными правами. Казалось бы, администраторам можно всё. Однако логика БСП строга и к ним. Если для администратора используется предопределенный профиль "Администратор", система стремится привести набор прав пользователя к точному соответствию этому профилю. Любые "ручные" добавки, сделанные в обход подсистемы управления доступом, могут быть расценены как отклонение от нормы и аннулированы. Для предотвращения таких ситуаций можно использовать решение для защиты добавленных администраторам ролей расширений.

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

Правильное решение: использование Профилей групп доступа

Чтобы роли расширения закреплялись надежно и не удалялись регламентными заданиями, мы должны играть по правилам БСП. Нам нужно "легализовать" нашу роль в системе управления доступом.

Рассмотрим пошаговый алгоритм правильной настройки прав для ролей расширения.

Шаг 1. Подготовка роли в расширении

Убедитесь, что роль в расширении создана корректно. Галочку "Использовать основные роли для всех пользователей" при подключении расширения устанавливать не нужно, если вы хотите разграничивать доступ (давать роль только избранным).

Шаг 2. Создание Профиля групп доступа

Вместо того чтобы назначать роль напрямую пользователю, мы создадим для неё профиль групп доступа. Запустите программу в режиме "1С:Предприятие" под правами администратора. Для автоматизации этого процесса и визуального управления правами подойдёт профессиональный конструктор профилей и групп доступа.

  1. Перейдите в раздел Администрирование -> Настройки пользователей и прав.
  2. Откройте список Профили групп доступа.
  3. Нажмите кнопку "Создать".
  4. Назовите профиль понятно, например: "Дополнительные функции (Расширение)".
  5. В табличной части "Разрешенные действия (роли)" найдите роль из вашего расширения.

    Важно: Если расширение подключено корректно, роли из него автоматически попадают в список доступных ролей при настройке профиля. Если вы не видите роль, проверьте, активно ли расширение.

  6. Отметьте галочкой вашу роль (или несколько ролей расширения).
  7. Запишите и закройте профиль.

Шаг 3. Создание Группы доступа

Теперь нужно связать профиль с конкретными пользователями.

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

Результат и преимущества такого подхода

После выполнения этих действий произойдет следующее:

  1. При записи Группы доступа БСП сама инициирует обновление прав пользователей.
  2. Система увидит, что пользователю назначен Профиль, содержащий роль из расширения.
  3. БСП сама (легально) добавит эту роль пользователю на уровне платформы.
  4. При следующем запуске регламентного задания "Обновление доступа" система сверит права и увидит полное соответствие: роль есть у пользователя, и она обоснована наличием Группы доступа. Удаления не произойдет.

Преимущества:

Технические детали для разработчиков

Если вам интересно, где именно хранятся данные, о которых шла речь в обсуждении, рассмотрим структуру хранения прав.

Данные о том, какие права назначены пользователю физически (на уровне платформы), можно получить программно через объект:


ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("Иванов");
РолиПользователя = ПользовательИБ.Роли; // Здесь ваша роль то появляется, то исчезает

Данные БСП (логический уровень) хранятся в следующих объектах метаданных:

В некоторых случаях (например, при динамическом обновлении расширения) может потребоваться принудительное обновление справочника идентификаторов, чтобы новые роли стали доступны для выбора в профилях. Для этого обычно используется обработка "Обновление вспомогательных данных" или запуск с параметром ЗапуститьОбновлениеИнформационнойБазы.

Вывод

Проблема исчезновения галочек в управлении расширениями — это не баг платформы, а следствие работы механизмов безопасности БСП. Прямое назначение ролей расширения конкретным пользователям в обход подсистемы "Управление доступом" в типовых конфигурациях является некорректным. Используйте связку Профиль групп доступа + Группа доступа, и ваши настройки прав будут работать стабильно.

← На главную