Как скопировать правило ограничения доступа (RLS) на все роли в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Штатный способ: инструмент «Все ограничения доступа» в конфигураторе

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

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

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

Особенность объединения ролей в платформе 1С

Проанализируем важный аспект платформенного механизма контроля доступа, из-за которого возникает необходимость модифицировать сразу все роли. В 1С действует фундаментальный принцип: права пользователей суммируются по логическому правилу «ИЛИ».

Если у пользователя назначено несколько ролей, дающих право на чтение одного и того же объекта, то:

  1. Если хотя бы в одной роли право на чтение предоставлено без ограничения RLS (полный доступ), то доступ будет полным. Ограничения из остальных ролей применяться не будут.
  2. Если право на чтение ограничено по RLS во всех назначенных ролях, итоговое условие доступа объединяется через логическое «ИЛИ» между условиями этих ролей.

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

Альтернативный технический вариант: скриптовая модификация файлов выгрузки

Если конфигурация выгружена в файлы или находится в системе контроля версий (Git), можно воспользоваться автоматической обработкой XML-файлов описания прав. Рассмотрим логику этого подхода:

  1. Выгрузим конфигурацию в файлы через меню Конфигурация > Выгрузить конфигурацию в файлы.
  2. В каталоге выгрузки найдем каталоги ролей и соответствующие файлы прав.
  3. С помощью внешнего скрипта или обработки на 1С программно добавим в блок нужного объекта фрагмент XML-кода ограничения доступа на чтение:

<name>Read</name>
<value>true</value>
<restrictionByCondition>
	<condition>ТекущаяТаблица ГДЕ ТекущаяТаблица.Менеджер = &ТекущийПользователь</condition>
</restrictionByCondition>
  1. Загрузим измененные файлы обратно в конфигурацию. Этот метод удобен при автоматизации сборки, однако требует аккуратности, чтобы не повредить структуру XML.

Архитектурные риски и типовой подход БСП в современных конфигурациях

Прежде чем внедрять ручные RLS во все 150 ролей конфигурации «Управление торговлей 11», «ERP» или «КА», проанализируем последствия такого решения для дальнейшей эксплуатации системы.

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

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

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

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

Выясним, какие штатные архитектурные альтернативы существуют в УТ 11 для разделения видимости документов между менеджерами:

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