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

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

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

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

Механизм «слияния» метаданных и определение новых объектов

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

Здесь в игру вступает свойство роли «Устанавливать права для новых объектов». Рассмотрим ситуацию: у вас есть обычный пользователь с ограниченным набором прав (например, «Менеджер по продажам»). В одной из его ролей в основной конфигурации по ошибке или «по наследству» со времен версии 8.2 установлен указанный флаг. Разберем по шагам, что происходит в системе:

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

Анализ настроек расширения: обратная сторона медали

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

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

Следование стандартам разработки (STD532)

Выясним причину, по которой 1С придерживается именно такой логики. Согласно официальному стандарту разработки №532, использование флага Устанавливать права для новых объектов строго регламентировано. Рассмотрим основные правила:

Как диагностировать и исправить проблему программно

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


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

Для более глубокого анализа выполним перебор всех ролей пользователя, чтобы найти ту самую «мину замедленного действия». Мы можем проанализировать коллекцию Роли метаданных:


Для Каждого ТекущаяРоль Из Метаданные.Роли Цикл
    Если ТекущаяРоль.УстанавливатьПраваДляНовыхОбъектов Тогда
        Сообщить("Внимание: Роль '" + ТекущаяРоль.Имя + "' имеет опасный флаг!");
    КонецЕсли;
КонецЦикла;

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

Пошаговый алгоритм решения проблемы

Разберем последовательность действий, которую необходимо выполнить администратору или разработчику для устранения проблемы:

  1. Откройте основную конфигурацию в режиме Конфигуратор.
  2. Перейдите в список ролей и для каждой роли, кроме административной, проверьте свойство Устанавливать права для новых объектов. Снимите флаг там, где он не нужен.
  3. Откройте свойства расширения (правой кнопкой на корне расширения — «Свойства»).
  4. Убедитесь, что флаг Устанавливать права для существующих ролей снят, если вы планируете ограничивать доступ к объектам расширения только специальными ролями самого расширения.
  5. Обновите конфигурацию базы данных.
  6. В режиме «1С:Предприятие» проверьте, что у пользователя пропали лишние права. Если в расширении созданы свои роли, добавьте их нужным пользователям через профили групп доступа.

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

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

← На главную