Встраиваем производительный режим RLS в свою конфигурацию (БСП 3.1.7)

31.07.23

Администрирование - Роли и права

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

Кратная вводная по терминологии и используемым подсистемам

RLS (Record Level Security) или ограничение прав на уровне записи — это настройка прав пользователей в разрезе конкретных данных (по организации, подразделению, складу и т.д.).

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

Подсистема БСП "Управление доступом" - позволяет настраивать права пользователей для произвольных элементов данных информационной базы (элементов справочников, документов, записей регистров, бизнес-процессов, задач и т. д.). В данной подсистеме есть 2 варианта работы RLS: производительный или стандартный.

Производительный вариант - предварительный расчет прав доступа. Стандартный вариант - расчет прав выполняется «на лету» непосредственно при доступе к данным.

За погружением и более детальной информацией об этих режимах я отсылаю вас к следующим источникам:

  1. Описание подсистемы "Управление доступом"
  2. Статья Производительный режим работы RLS

Перед внедрением необходимо заполучить в свои комплект поставки БСП той же версии, что внедрена в конфигурацию, из которого будете плотно использовать 2 полезных инструмента:

  • отчет Проверка внедрения БСП (с отбором по подсистеме "Управление доступом")
  • обработка УправлениеДоступом из комплекта "Инструменты разработчика"

Инструменты эти будут нужны для подготовки текстов ограничений, проверки внедрения и исправления ошибок (а они будут).

 

Используемые объекты метаданных

Переходим непосредственно к внедрению производительного режима RLS в конфигурацию. Какие объекты метаданных потребуются?

  1. Общий модуль УправлениеДоступомПереопределяемый
  2. Определяемые типы:
    • ВладелецЗначенийКлючейДоступа
    • ВладелецЗначенийКлючейДоступаДокумент
    • ВладелецЗначенийКлючейДоступаОбъект
    • ВладелецЗначенийКлючейДоступаНаборЗаписей
    • ПолеРегистраКлючейДоступаКРегистрам
  3. Справочник ИдентификаторыОбъектовМетаданных
  4. Список объектов метаданных, которые будут разделителями доступа; у меня это справочник "Организация".
  5. Список объектов метаданных, в которые мы будем встраивать новый механизм. Для примера беру 3 объекта:
    • Справочник "Физические лица"
    • Документ "Штатное расписание
    • Регистр сведений "Гражданство"

 

Доработки модуля УправлениеДоступомПереопределяемый

  1. В процедуре ПриЗаполненииВидовДоступа указываем какие конкретно объекты будет выступать в роли ограничителей. В моём примере это организация.

    Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
    	
    	ВидДоступа = ВидыДоступа.Добавить();
    	ВидДоступа.Имя = "Организации";
    	ВидДоступа.Представление = НСтр("ru = 'Организации'");
    	ВидДоступа.ТипЗначений   = Тип("СправочникСсылка.Организации");
    	
    КонецПроцедуры

     

  2. В процедуре ПриЗаполненииСписковСОграничениемДоступа указываем на какие объекты метаданных применяется ограничение.

    Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт
    	
    	Списки.Вставить(Метаданные.Справочники.ФизическиеЛица, Истина);
    	Списки.Вставить(Метаданные.Документы.ШтатноеРасписание, Истина);
    	Списки.Вставить(Метаданные.РегистрыСведений.Гражданство, Истина);
    	
    КонецПроцедуры
    

     

  3. В процедуре ПриЗаполненииВидовОграниченийПравОбъектовМетаданных указываются объекты стандартного режима работы RLS. Это нужно для корректной работы отчета "Права доступа" и для случая, когда пользователи захотят выключить стандартный режим RLS.

    Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт
    	
    	// ФизическиеЛица
    	Описание = Описание + "
    	|Справочник.ФизическиеЛица.Чтение.Организации";
    	
    	// ШтатноеРасписание
    	Описание = Описание + "
    	|Документ.ШтатноеРасписание.Чтение.Организации";
    
    	// Гражданство
    	Описание = Описание + "
    	|РегистрСведений.Гражданство.Чтение.Организации";
    	
    КонецПроцедуры

     

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

Мои ошибки:

  1. Я пропустил, что надо что-то добавлять в процедуру ПриЗаполненииВидовОграниченийПравОбъектовМетаданных.
  2. Я забывал указать объект в процедуру ПриЗаполненииСписковСОграничениемДоступа

Все эти ошибки легко вылавливаются отчетом Проверка внедрения БСП, который является незаменимым помощником при внедрении этой подсистемы.

 

Включаем объекты в определяемые типы данных

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

  1. Объект, выступающий разделителем данных (справочник "Организация") включается в следующие типы:
    • ВладелецЗначенийКлючейДоступа
    • ВладелецЗначенийКлючейДоступаОбъект
    • ПолеРегистраКлючейДоступаКРегистрам
  2. Справочник "Физические лица"
    • ВладелецЗначенийКлючейДоступа
    • ВладелецЗначенийКлючейДоступаОбъект
    • ПолеРегистраКлючейДоступаКРегистрам т.к. является участником левого соединения в ограничении доступа к регистру сведений
  3. Документ "Штатное расписание"
    • ВладелецЗначенийКлючейДоступа
    • ВладелецЗначенийКлючейДоступаДокумент
  4. Регистр сведений "Гражданство"
    • ВладелецЗначенийКлючейДоступаНаборЗаписей

Мои ошибки:

  1. Попытался вставить документ во ВладелецЗначенийКлючейДоступаОбъект, т.к. не обратил внимание на надпись кроме документов.
  2. Попытался добавить регистр сведений во ВладелецЗначенийКлючейДоступа, т.к. пропустил надпись "ссылочные".
  3. Вообще забыл про тип ПолеРегистраКлючейДоступаКРегистрам, в который надо указывать поля ограничители и поля-соединения в запросах ограничения
  4. Не учёл, что во ВладелецЗначенийКлючейДоступа, нужно добавлять ещё и связующие поля регистра сведений, т.е. если фильтр по организации, но организация достаётся через справочник "Физические лица", то этот справочник тоже надо добавить во ВладелецЗначенийКлючейДоступа.

Все эти ошибки легко вылавливаются отчетом Проверка внедрения БСП, который является незаменимым помощником при внедрении этой подсистемы.

 

Создание предопределенных элементов в справочнике ИдентификаторыОбъектовМетаданных

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

Объект метаданных Подсистема БСП ТекстОшибки
РегистрСведений.Гражданство Управление доступом Отсутствует предопределенный элемент РегистрСведенийГражданство в справочнике ИдентификаторыОбъектовМетаданных

 

Данная ошибка была найдена через отчет Проверка внедрения БСП, который является незаменимым помощником при внедрении этой подсистемы.

 

Добавление кода ограничения в модуль менеджера объектов метаданных

О том как писать тексты ограничений очень подробно раскрыто в документации к БСП, мне от себя добавить нечего. Все ссылки есть в начале статьи.

Единственное, что добавлю - упоминал ранее обработку из инструментов разработчика БСП УправлениеДоступом. В неё можно вставлять текст ограничения и проверять, правильно ли он написан

 

 

  1. Справочник "Организации"
    Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    	
    	Ограничение.Текст =
    	"РазрешитьЧтениеИзменение
    	|ГДЕ
    	|	ЗначениеРазрешено(Ссылка)";
    	
    КонецПроцедуры

     

  2. Справочник "Физические лица"
    Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    	
    	Ограничение.Текст =
    	"ПрисоединитьДополнительныеТаблицы
    	|ЭтотСписок КАК ЭтотСписок
    	|
    	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИстория КАК КадроваяИстория
    	|    ПО КадроваяИстория.ФизическоеЛицо = ЭтотСписок.Ссылка
    	|;
    	|РазрешитьЧтениеИзменение
    	|ГДЕ
    	|	ЗначениеРазрешено(КадроваяИстория.Организация)";
    
    КонецПроцедуры

     

  3. Документ "Штатное расписание", реквизит шапки "Организация"
    Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    	
    	Ограничение.Текст =
    	"РазрешитьЧтениеИзменение
    	|ГДЕ
    	|	ЗначениеРазрешено(Организация)";
    
    КонецПроцедуры

     

  4. Регистр сведений "Гражданство" - ищем организацию через регистр "КадроваяИстория". Если поле не заполнение, считаем, что чтение разрешено. 
    Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    	
    	Ограничение.Текст =
    	"ПрисоединитьДополнительныеТаблицы
    	|ЭтотСписок КАК ЭтотСписок
    	|
    	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИстория КАК КадроваяИстория
    	|    ПО КадроваяИстория.ФизическоеЛицо = ЭтотСписок.ФизическоеЛицо
    	|;
    	|РазрешитьЧтениеИзменение
    	|ГДЕ
    	|	ЗначениеРазрешено(КадроваяИстория.Организация, ПустаяСсылка КАК ИСТИНА)";
    
    КонецПроцедуры

Мои ошибки всегда были связаны с синтаксисом ограничений, но все они легко вылавливались через отчет Проверка внедрения БСП, а исправлял их потом через обработку УправлениеДоступом.

 

Доработка форм объектов

Во все формы объектов необходимо будет вставить дополнительные обращения к подсистеме "Управление доступом" следующего вида

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	
	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
КонецПроцедуры

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

 

Дорабатываем роли, добавляя в них шаблоны доступа и настройки доступа

 

В данном случае это надо вставлять либо на чтение, либо на добавление, изменение (в зависимости от настройки ваших ролей). 

 

 

  1. Cправочник "Физические лица"
    #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
    #ДляОбъекта("")
    #Иначе
    #ПоЗначениямРасширенный...
    #КонецЕсли

     

  2. Документ "Штатное расписание"
    #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
    #ДляОбъекта("")
    #Иначе
    #ПоЗначениям...
    #КонецЕсли

     

  3. Регистр сведений "Гражданство"
    #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
    #ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрСведенийГражданство", "ФизическоеЛицо", "", "", "", "")
    #Иначе
    #ПоЗначениямРасширенный...
    #КонецЕсли

Основная ошибка - пропускал некоторые объекты при массовом изменение текстов ограничений. Это легко ловилось запуском отчета Проверка внедрения БСП.

 

Заключение

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

Как всегда, спасибо коллегам из компании Омега за то, что разрешили поделиться материалом.

Спасибо за прочтение. С уважением, Вдовенко Сергей.

RLS производительный БСП

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    127325    688    389    

740

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

14400 руб.

06.12.2023    3803    20    1    

42

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    4771    12    2    

38

Запрет доступа к данным по зарплате для БП 3.0 и КА 2.5

Зарплата Роли и права Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5700 руб.

27.05.2021    33398    206    89    

166

Роли для кладовщика

Логистика, склад и ТМЦ Роли и права Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

2520 руб.

21.05.2019    1692788    554    192    

133

Расширение для разграничения доступа к контрагентам и обработка для группового назначения доступа для Бухгалтерии (RLS) 3.0.143.42

Роли и права Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение предназначено для Бухгалтерии предприятия (версии ПРОФ и КОРП). Типовая конфигурация остается на поддержке. С помощью расширения менеджер по продажам будет иметь доступ к контрагентам и списку их документов только в случае, если он является для них ответственным. Пользователю с полными правами также доступна обработка «Назначение ответственных» для группового добавления/удаления ответственного в карточке контрагента. Есть версия данного расширения для клиентов Fresh - в магазине расширений (Fresh)

9360 руб.

14.09.2022    5884    7    4    

9

Универсальная система оповещений в базе или по почте по произвольным условиям, расписанием, ролям и пользователям (Расширение / конфигурация для платформ 8.3.6+, для ЛЮБЫХ баз)

Роли и права Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Данная система разработана как альтернатива стандартной системе напоминаний. Но имеет ряд существенных преимуществ: отображение в базе или с отправкой по почте, свое расписание, возможность фильтрации по ролям и пользователям, формирование своих запросов и макетов, шаблоны писем, работа в фоне. А также может блокировать работу пользователей при заданных условиях. Может работать в составе любой конфигурации. Имеется справка с описанием возможностей. (Обновление от 20.02.2024, версия 2.2, расширение)

19200 руб.

29.11.2019    24840    14    8    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3040 01.08.23 13:39 Сейчас в теме
Статья хорошая. Но проблема таких статей в том, что описано что делать, но не описано почему и зачем. Автор, интересно, сам-то разобрался с этим?
gusen_it; +1 Ответить
2. tango 543 01.08.23 15:19 Сейчас в теме
(1) согласен. и даже плюсанул бы автору, если бы RLS не была абсолютным злом
(злее только картинки и файлы в базе)
kser87; zeltyr; +2 Ответить
5. zeltyr 571 01.08.23 17:45 Сейчас в теме
(2) В целом поддерживаю - RLS это грустно, но необходимо. Поэтому молча тянем лямку и стараемся настроить это максимально аккуратно. Видели бы вы файлик контроля настройки по ролям, что я вёл и как контролировал, чтобы не пересечься по RLS между ролями --__--
3. Vasvas05 22 01.08.23 15:59 Сейчас в теме
(1)
но не описано почему и зачем

на итс написано зачем производительный режим нужен, а если у кого нет понимания зачем, то и статью можно не читать. Зачем сюда вставлять копи паст теории.
RLS производительный режим
4. zeltyr 571 01.08.23 17:43 Сейчас в теме
(1) цель статьи была именно написать как, а не зачем. Для погружения в "что это" - указал в начале статьи ссылку на документацию БСП. Как это устроено "в целом" - указал соседнюю статью на инфострарте, где это прекрасно разобрано. Зачем повторятся?

Отвечая зачем это конкретно мне - конфигурация, которую поддерживаю и дорабатываю имеет сертификацию 1С:совместимо, имеет встроенную библиотеку БСП "Управление доступом" и обязательно должна иметь ограничения на уровне записей (требования бизнеса), а значит должна поддерживать 2 режима работы, поэтому и занимался этим вопросом.
triviumfan; kser87; +2 Ответить
6. PerlAmutor 129 01.08.23 19:57 Сейчас в теме
Тоже внесу свои 5 копеек. Мне так и не удалось перейти на производительным режим из-за того, что в нем недоступно использование Параметров Сеансов. У нас почти все складские документы на этом завязаны. Есть отдельный самописный регистр, где эти склады прописаны каждому пользователю. Если считать уникальные наборы групп складов, то выходит ~800 групп, которые пришлось бы создавать. Всего в регистре около 10к записей.

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

А еще обработка ПроверкаВнедренияБСП руганулась, что шаблон в роли БазовыеПраваБСП отличается от шаблона в роли ИзменениеУчастниковГруппДоступа ("Содержит поставляемые стандартные шаблоны ограничения доступа") в ERP. Вот и думай исправлять или не исправлять. Кстати еще были ложные срабатывания, шаблоны внешне ничем не отличались, но обработка упорно в них видела расхождения. Я даже выгрузил в XML файлы роли конфигурации и сравнил через KDiff3, ни одного байта там не изменено.
7. kser87 2441 01.08.23 20:30 Сейчас в теме
Люблю такие статьи: готовая инструкция по сути.
8. PerlAmutor 129 02.08.23 05:41 Сейчас в теме
Кстати при внедрении производительного РЛС многие могут столкнутся с тем, что существуют роли на типовые документы со своим РЛС, где в типовом функционале этого не было предусмотрено вообще. Т.е. вам придется через общий модуль переопределять шаблоны ограничений для типовых документов (чтобы не трогать их модули менеджеров). Кроме этого придется подумать над реализацией событий ПриЧтенииНаСервере и ПослеЗаписиНаСервере где их никогда не было в типовом документе. И вот интересно, если переопределять эти события через расширения то обработка ПроверкаВнедренияБСП скажет, что все ОК или будет вечно выдавать в ошибки такие документы.
Оставьте свое сообщение