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