Найстройка RLS для регистра сведений в расширении

1. tdrinkam1 6 18.04.24 12:53 Сейчас в теме
УТ 11.5.12. С:Предприятие 8.3 (8.3.22.2239). Включен производительный RLS.

В расширении (адаптация) создан регистр сведений «ОбмТК_ДанныеЗаказовТК» (непериодический, независимый).
Одно из измерений РС - «ДокументИБ» , с типом Определяемый Тип (создан в расширении) с допустимыми заимствованными типами ДокументСсылка: реализации, приобретения, заказы клиентам, поставщикам, корректировки реализаций, приобретений, возвраты клиентам, поставщикам (по сути заказы и первичка по ним).
Форма списка РС с основной таблице «РегистрСведений.ОбмТК_ДанныеЗаказовТК» имеет поле «ДокументИБ» ссылочного типа. Если у пользователя нет прав на чтение документа ИБ, то он отображается кракозябрами.

Задача: при использовании производительного RLS ограничить /запретить пользователю с ролью Чтение и Просмотр РС отображение на форме списка РС записи, где в измерении «ДокументИБ» указан документ, на которых у пользователя нет прав на чтение. Все остальные записи (где ДокументИБ не заполнен, Null, пустая ссылка, или указан доступный для чтении /просмотра документИБ) – отображать в списке.

Что сделано:
1. в расширение заимствован определяемый тип «ВладелецЗначенийКлючейДоступаНаборЗаписей» куда внесен наш РС. Режим совместимости 8.3.21 позволяет это сделать с заимствованным Определяемым типом. Добавленый РС в режиме предприятие в этом опред.типе есть, проверил.

2. В расширение заимствован модуль «УправлениеДоступомПереопределяемый», куда добавлен код:
«&После("ПриЗаполненииСписковСОграничениемДоступа")
Процедура ОбмТК_ПриЗаполненииСписковСОграничениемДоступа(Списки)
Списки.Вставить(Метаданные.РегистрыСведений.ОбмТК_ДанныеЗаказовТК, Истина);
КонецПроцедуры».


3. В модуль менеджер РС добавлен код:
«Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЧтениеОбъектаРазрешено(ДокументИБ, ПустаяСсылка КАК Истина,Неопределено КАК Истина,Null КАК Истина)";

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

4. В роль расширения добавлено права на чтение и просмотра РС. Для Чтения внесено ограничение по шаблону:
«#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляРегистра("ИдентификаторыОбъектовРасширений.РегистрСведенийОбмТК_ДанныеЗаказовТК", "ДокументИБ", "", "", "", "")
#Иначе ИСТИНА
#КонецЕсли»


5. В расширение заимствован справочник ИдентификаторыОбъектовРасширений, куда добавлено предопределенные объект «РегистрСведенийОбмТК_ДанныеЗаказовТК». Сам объект индентификатораОбъектаРасширения для нового РС имеет флаг «Предопределенный» с указанием имени предопределенного элемента.

6. Сама роль входит в состав вновь созданной подсистемы, как и РС.

Результат: пользователь в такой ролью видит в списке только те записи, где документ ИБ не указан, вне зависимости от того есть у него права на чтение/просмотр ДокументаИБ или нет.

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

"Имя реквизита Значение реквизита
ВариантДоступа 2
КлючДоступа 0c1cb423-fd66-11ee-81a5-b06ebf5bb0d3
Поле1 Заказ поставщику ТДУТ-000835 от 04.04.2024 14:58:07
Поле2 Null
Поле3 Null
Поле4 Null
Поле5 Null
Регистр Обмен с ТК - данные доставок через ТК (Регистр сведений)"


И одна запись для неуказанных (пустое поле ДокументИБ):

"Имя реквизита Значение реквизита
ВариантДоступа 2
КлючДоступа 5ab0f94d-fc02-11ee-81a5-b06ebf5bb0d3
Поле1
Поле2 Null
Поле3 Null
Поле4 Null
Поле5 Null
Регистр Обмен с ТК - данные доставок через ТК (Регистр сведений)"


Вопрос: почему RLS для РС не работает как задумано??? Почему пользователь указывает в записе ДокументИБ (который он видит конечно) и эта запись пропадает из списка?
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот