Имя: Пароль:
1C
1С v8
Настройка RLS для чтения списка РС (производ-й режим)
0 maskitone
 
18.04.24
12:42
В расширении (адаптация) создан регистр сведений «ОбмТК_ДанныеЗаказовТК» (непериодический, независимый).

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

Форма списка РС с основной таблицей «РегистрСведений.ОбмТК_ДанныеЗаказовТК» имеет поле «ДокументИБ» ссылочного типа.

Если у пользователя нет прав на чтение документа ИБ, то он отображается кракозябрами.

Задача:  при использовании производительного 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 для РС не работает как задумано??? Почему пользователь указывает в записе ДокументИБ (который он видит конечно) и эта запись пропадает из списка?
1 Волшебник
 
18.04.24
22:26
Потому что RLS для ЕRP был сгенерирован и хрен Вы там разберётесь
2 maskitone
 
19.04.24
01:00
(1) но надо. Проблема именно в использовании шаблона ПоРегистру. Если использовать ЧтениеОбъектаРазрешено(ДокументИБ), то обработка бсп генерит шаблон #ПоОбъекту(ДокументИБ) для роли. В этом случае видно записи с документом ИБ, но не видно записей с незаполненным полем ДокументИБ.Если добавляем условие неопределенно как истина, то генерится уже шаблон ПоРегистру. И вот он уже не отрабатывает доступ на чтение документа. Толи шаблон кривой, Толи в базе не все заполняется...

Приходится усложнять код и прописывать условия в коде"неопределенно как истина" и т.п. но для кода с условием обработка выдает уже шаблон #ПоРегистру(...). И вот этот шаблон отрабатывает не верно. Или у базе не заполняются какие-то данные.
При этом ключи доступа для записей с документомИБформируются со значением на другой
3 Волшебник
 
19.04.24
01:05
(2) Счастья вам и везения
4 FIXXXL
 
19.04.24
09:07
c RLS - только пробовать и думать
ибо во все времена шаблоны писали люд(ь)и, которые знают, как эта херь работает под капотом
я разбирался с типовым, ускорение в 5 раз :) из-за точки в Т.Контрагент.Менеджер, к примеру,
а надо было соединение, да еще найти во всех "","","","","":)  куда это воткнуть
писал свое, но это жесткий пиздей, высчитывать все эти запятые в шаблоне :)
теперь есть еще вариант...
5 FIXXXL
 
19.04.24
09:08
>Если у пользователя нет прав на чтение документа ИБ, то он отображается кракозябрами

а может стОит в форму кинуть на ДС свой запрос и добавить РАЗРЕШЕННЫЕ ;)
6 mikecool
 
19.04.24
09:16
(4) производительный режим избавляет от этих запятых, но как его заставить работать - хз
сейчас тоже для нового документа по мануалу сделал все - и ничего не работает ) ключи не создаются, ограничения не работают ))
7 maxab72
 
19.04.24
09:18
(0) Если в расширении, то забейте на типовой шаблон. Напишите свое правило. Оно будет компактное, легко читаемое и быстрое (если понимаете, что пишете). И сопровождать его будет легко.
8 viraboy
 
19.04.24
12:00
(0) Через обновление вспомогательных данных пробовали обновить все данные по ограничениям и ключи? Бывает при изменении шаблона БСП не видит изменений. И если убрать условие на пустые - что будет? По идее доступные документы должен только отображать
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн