Методика подключения новых объектов к производительному методу RLS в 1С

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

Подключение новых ссылочных типов к производительному методу RLS в 1С

1. В модуле менеджера объекта добавляем процедуру ПриЗаполненииОграниченияДоступа, в ней настраиваем доступ по отбору. Если реквизит отбора не присутствует среди реквизитов, а является реквизитом одного из полей, то необходимо использовать таблицу типа данного поля через «ПрисоединитьДополнительныеТаблицы». Пример:

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

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

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

2. В модуле форму объекта добавляем:

                a. В событие «ПриЧтенииНаСервере» код:

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

                b. В событие «ПослеЗаписиНаСервере» код:

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

3. Добавляем объект в определяемые типы «ВладелецЗначенийКлючейДоступа» и «ВладелецЗначенийКлючейДоступаДокумент» если объект – документ.

4. В ОМ «УправлениеДоступомПереопределяемый» прописываем РС в процедуре «ПриЗаполненииСписковСОграничениемДоступа

5. В шаблонах ролей добавить шаблон на чтение:

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

Подключение новых регистров сведений к производительному методу RLS в 1С

Данный алгоритм рассматривает РС без регистраторов

1. Добавляем РС в определяемый тип «ВладелецЗначенийКлючейДоступаНаборЗаписей»

2. В ОМ «УправлениеДоступомПереопределяемый» прописываем РС в процедуре «ПриЗаполненииСписковСОграничениемДоступа».

3. В модуле менеджера добавляем процедуру ПриЗаполненииОграниченияДоступа, в ней настраиваем доступ по отбору. Если реквизит отбора не присутствует среди измерений, ресурсов, реквизитов, а является реквизитом одного из полей, то необходимо использовать таблицу типа данного поля через «ПрисоединитьДополнительныеТаблицы». Пример:

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

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

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

4. В справочник «ИдентификаторыОбъектовМетаданных» добавляем предопределенный элемент с именем «РегистрСведений» + <ИмяРС>, пример: РегистрСведенийСостояниеОбеспеченияТС

5. В шаблонах ролей добавить шаблон на чтение:

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

где в первом параметре шаблона «ДляРегистра» указывается нами добавленный в П4. предопределенный элемент справочника, во втором поле РС с которым связан отбор. В нашем случае это ЗаказПоставщику «Т2.Ссылка = Т.ЗаказПоставщику»

Дополнение к инструкциям по настройке RLS в 1С

Инструкции по подключению закончились, но это еще не все. Шаблоны доступа «ДляОбъекта» и «ДляРегистра» в новые роли необходимо копировать из роли «ИзменениеУчастниковГруппДоступа».

Для корректной последующей работы всего механизма необходимо обновление данных. Для этого есть три варианта:

  1. Обработка «ОбновлениеВспомогательныхДанных.epf»;
  2. Запуск с параметром «ЗапуститьОбновлениеИнформационнойБазы» через параметр /С;
  3. Увеличения релиза.

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar