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

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

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

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

Суть проблемы

Ситуация выглядит следующим образом: в базу добавляется расширение, содержащее новую роль, например, РольРасширения. Эта роль дает доступ к объектам расширения.

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

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

Почему это происходит? Анализ механизма БСП

Причина кроется в защитных механизмах подсистем «Управление доступом» и «Пользователи». Разработчики типовых конфигураций (ERP, КА, ЗУП, Бухгалтерия и др.) заложили логику, гарантирующую, что у главного администратора всегда будет эталонный набор прав.

Давайте разберем, как система "мыслит":

  1. Существует предопределенный профиль групп доступа — Администратор.
  2. В коде конфигурации (обычно в общих модулях) жестко прописано, какие роли должны быть у пользователя, входящего в эту группу.
  3. При записи пользователя или при входе в систему запускается процедура актуализации ролей.
  4. Система проверяет: "Этот пользователь — Администратор?".
  5. Если ответ "Да", система принудительно устанавливает ему список ролей, прописанный в коде, и удаляет все остальные, считая их ошибочно добавленными или лишними.

Именно поэтому, добавленные вручную или через расширение роли считаются "мусором" и вычищаются.

Решение 1: Создание собственного профиля (Рекомендуемое)

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

Давайте пройдем этот путь по шагам:

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

Необходимо зайти в режим 1С:Предприятие под пользователем с полными правами. Перейдем в раздел Администрирование — Настройки пользователей и прав — Профили групп доступа.

Нам нужно создать новый профиль, который будет копией административного, но с нашей добавкой:

  1. Найдите в списке профиль Администратор.
  2. Скопируйте его (обычно кнопка F9 или команда "Скопировать").
  3. Назовите новый профиль, например, Администратор (с расширением).
  4. В табличной части «Разрешенные действия (роли)» найдите и поставьте галочку напротив вашей роли из расширения (например, РольРасширения).
  5. Убедитесь, что галочки Полные права и Администратор системы также стоят (они должны скопироваться из исходного профиля).
  6. Запишите профиль.

Шаг 2. Создание группы доступа и назначение пользователей

Теперь создадим группу доступа на основе нового профиля:

  1. Перейдите в справочник Группы доступа.
  2. Создайте новую группу, выбрав профиль Администратор (с расширением).
  3. Добавьте в эту группу нужных пользователей-администраторов.

Шаг 3. Исключение из стандартной группы

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

  1. Откройте карточку пользователя или группу доступа Администраторы.
  2. Исключите пользователя из стандартной группы Администраторы.

Теперь система видит, что пользователь относится к кастомному профилю. Для кастомных профилей жесткая логика "эталонных ролей" не применяется — система просто выдает набор ролей, отмеченных в профиле. Ваша роль из расширения останется на месте.

Решение 2: Программная доработка (Через переопределяемый модуль)

Если по каким-то причинам вы обязаны использовать именно предопределенную группу «Администраторы» (например, на неё завязана другая логика системы), вам придется вмешаться в код через расширение. Нам нужно "объяснить" системе, что нашу новую роль удалять нельзя.

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

Поиск нужного метода

В зависимости от версии БСП, название модуля и процедуры может отличаться. Чаще всего используются:

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

Реализация в расширении

Предположим, мы нашли подходящий метод ПриЗаполненииНеотключаемыхРолейПользователей в модуле УправлениеДоступомПереопределяемый. Нам нужно заимствовать этот модуль в расширение и доработать процедуру, используя аннотацию &После.

Примерный код реализации:


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

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

Особенности ограничения прав и роль "Полные права"

В вопросе автора темы прозвучала важная деталь: "По умолчанию все объекты расширения у меня доступны пользователям с ПолнымиПравами... Я добавил в расширение роль ПолныеПрава и снял права на объекты расширения".

Давайте проанализируем этот подход, так как он содержит потенциальные риски.

Риски заимствования роли "Полные права"

Заимствовать типовую роль ПолныеПрава в расширение и менять ей права (снимать галочки) — плохая практика.

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

Как правильно ограничить доступ?

В модели безопасности 1С действует принцип аддитивности: «Разрешено, если разрешено хотя бы в одной роли».

Если у пользователя есть роль ПолныеПрава, и в ней стоит галочка «Разрешить всё» (или глобальная настройка «Устанавливать права для новых объектов» в свойствах роли), то запретить доступ другой ролью невозможно. Запрещающих ролей в 1С (до версии платформы 8.3.2x с её усложненными механизмами) в явном виде нет.

Чтобы схема «Объекты расширения доступны только специальной роли» заработала, необходимо:

  1. Убедиться, что роль ПолныеПрава не имеет автоматического доступа к объектам расширения. К сожалению, для типовых ролей свойство «Устанавливать права для новых объектов» часто установлено в Истина. Это значит, любой новый справочник, который вы добавите, автоматически станет доступен админу.
  2. Если ваша задача — скрыть объекты даже от администратора (кроме тех, кому выдана спец. роль), то использование RLS (Restriction Level Security) или функциональных опций будет более грамотным решением, чем модификация роли ПолныеПрава.

Однако, если задача стоит просто раздать права другим пользователям, а администраторам оставить доступ "как есть", то лучшим решением будет:

Резюме

Подведем итог решения проблемы исчезающих ролей:

  1. Механизм БСП "чистит" роли пользователей группы Администраторы, приводя их к эталону.
  2. Любые роли из расширений, добавленные вручную, будут удалены при входе в систему.
  3. Чтобы избежать этого, создайте новый профиль групп доступа (копию административного), добавьте туда нужную роль и перенесите пользователей в новую группу доступа.
  4. Альтернативно (для разработчиков) — используйте расширение для модуля УправлениеДоступомПереопределяемый, чтобы добавить роль в список неотключаемых.

Используя эти методы, вы сможете гибко управлять доступом к функционалу расширений, сохраняя при этом порядок в правах пользователей.

← На главную