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