Почему у пользователей с полными правами пропадает доступ к новым объектам в 1С?

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

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

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

Особенности архитектуры БСП и причина сброса ролей

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

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

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


РолиАдминистратора = Новый Соответствие;
    
РолиАдминистратора.Вставить("ПолныеПрава", Истина);
Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
    Если ИмяРолиАдминистратораСистемы <> "ПолныеПрава" Тогда
        РолиАдминистратора.Вставить(ИмяРолиАдминистратораСистемы, Истина);
    КонецЕсли;
КонецЕсли;

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

Способ 1. Доработка типовой роли «Полные права»

Этот подход является наиболее правильным с точки зрения стандартов разработки фирмы 1С. Разберем его суть. Права на все новые подсистемы, справочники, документы и регистры должны быть сразу включены в основную роль конфигурации — ПолныеПрава.

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

Способ 2. Использование расширений для обхода ограничений

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

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

Посмотрим на пример того, как это можно реализовать в расширении:


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

После применения этого кода алгоритмы БСП перестанут удалять указанную роль у пользователей из группы администраторов.

Способ 3. Специальное именование ролей (для современных версий БСП)

В новых версиях Библиотеки стандартных подсистем (начиная с линейки 3.1.x) появился более элегантный встроенный механизм сохранения прав, специально разработанный для расширений. Рассмотрим, как им воспользоваться.

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

Способ 4. Создание профиля «Псевдо-администратора»

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

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

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

← На главную