Как установить права чтения на новый регистр сведений для всех ролей, сохранив конфигурацию на поддержке

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

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

Способ 1: Использование окна «Все роли» в основной конфигурации

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

Рассмотрим пошагово, как массово проставить права на чтение для нового регистра:

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

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

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

Способ 2: Использование расширений конфигурации (рекомендуемый метод)

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

Алгоритм действий следующий:

  1. Создадим новое расширение (меню Конфигурация — Расширения конфигурации).
  2. Добавим в расширение наш новый РегистрСведений (если он был создан в расширении) или заимствуем его из основной конфигурации.
  3. В расширении создадим новую роль, например, ЧтениеНовогоРегистра.
  4. В этой роли установим права Чтение и Просмотр на нужный регистр.
  5. В режиме «1С:Предприятие» назначим эту роль пользователям через Профили групп доступа.

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

Особенности работы в типовых решениях (БСП)

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

Для регистрации изменений выполним следующие действия:

  1. Запустим информационную базу под пользователем с полными правами.
  2. Если объект не появился в списке доступных в профилях доступа, запустим обновление идентификаторов. Обычно это происходит автоматически при запуске с параметром: /ЗапуститьОбновлениеИнформационнойБазы
  3. Или воспользуемся консолью разработчика и вызовем процедуру:
    
    Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
    

Использование привилегированного режима

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

В модуле менеджера регистра или в общем модуле используем конструкцию:


УстановитьПривилегированныйРежим(Истина);
// Здесь выполняется запрос к регистру или чтение набора записей
Выборка = РегистрыСведений.НашНовыйРегистр.Выбрать();
УстановитьПривилегированныйРежим(Ложь);

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

Автоматизация через выгрузку в XML

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

  1. Выгрузить конфигурацию в файлы.
  2. Использовать текстовый редактор или скрипт для массового поиска и замены прав на конкретный объект во всех файлах Role.ИмяРоли.xml.
  3. Загрузить конфигурацию обратно из файлов.

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

← На главную