Как правильно ограничить доступ к справочнику для пользователей с полными правами в 1С?

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

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

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

Почему стандартное ограничение роли «Полные права» не работает в БСП?

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

Этот механизм работает по следующим правилам:

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

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

Рассмотрим два корректных способа решения этой проблемы: программный метод (с помощью кода или расширения) и методологический метод (настройка профилей без изменения кода).

Решение 1. Программная проверка прав (через код или расширение)

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

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

Рассмотрим пример кода:


Процедура ПередЗаписью(Отказ)
    
    // Обязательно проверяем, не выполняется ли запись в режиме обмена данными
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    // Проверяем наличие специальной роли у текущего сеанса пользователя
    Если НЕ РольДоступна("РазрешитьРедактированиеСпецСправочника") Тогда
        Отказ = Истина;
        ВызватьИсключение "У вас нет достаточных прав для создания или изменения элементов этого справочника!";
    КонецЕсли;
    
КонецПроцедуры

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

Проверка прав по группе доступа без создания новых ролей

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

Посмотрим на пример такой реализации:


Процедура ПередЗаписью(Отказ)
    
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    // Ищем группу доступа по наименованию
    ГруппаРазрешения = Справочники.ГруппыДоступа.НайтиПоНаименованию("Доступ на изменение справочника Контрагенты");
    
    Если ЗначениеЗаполнено(ГруппаРазрешения) Тогда
        // Проверяем, входит ли текущий пользователь в данную группу
        Если НЕ УправлениеДоступом.ПользовательВГруппеДоступа(Пользователи.ТекущийПользователь(), ГруппаРазрешения) Тогда
            Отказ = Истина;
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Изменение справочника разрешено только участникам группы доступа '" + ГруппаРазрешения.Наименование + "'!";
            Сообщение.Сообщить();
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

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

Решение 2. Корректная настройка прав по стандартам 1С (без программирования)

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

Разберем этот процесс по шагам:

  1. Восстановление прав: Верните роли ПолныеПрава все стандартные права на наш справочник (верните обратно все снятые флажки).
  2. Создание пользовательского профиля: Создайте в режиме «1С:Предприятие» новый профиль групп доступа, например, с названием «Все права (кроме Администратора)». Скопируйте туда все роли, кроме Администрирование и ПолныеПрава.
  3. Настройка ролей для справочника: Создайте роль РедактированиеСправочникаХ и назначьте её только тем пользователям, которым действительно разрешено редактировать этот объект.
  4. Перевод пользователей: Исключите всех обычных бизнес-пользователей из предопределенной группы доступа Администраторы и переведите их в ваш новый профиль.
  5. Принудительное обновление БСП: После изменения состава ролей и групп запустите сеанс 1С с параметром запуска /C ЗапуститьОбновлениеИнформационнойБазы (буква C латинская) или воспользуйтесь типовой обработкой «Обновление вспомогательных данных». Это заставит БСП заново пересчитать кэш прав доступа и актуализировать список доступных ролей для всех пользователей.

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

← На главную