RLS и запросы (<Объект не найден>) #700676


#0 by UnsavedSoul
Как известно, наложив RLS на справочник Склады, например, выбирая все элементы справочника без РАЗРЕШЕННЫЕ наткнемся на исключение, а с ним - увидим в результате только те элементы, которые удовлетворяют условию RLS. Однако, обращаясь к таблице остатков регистра накопления и выбирая в качестве результирующего поля склад, мы увидим остатки по всем складам, вот только у тех записей, что условию RLS по справочнику Склады не удовлетворяют, в соответствующем поле будет красоваться <Объект не найден>. Собственно вопрос, как от него избавиться?:) Пока пришло в голову только создание ВТ с разрешенными складами и ограничение результирующего запроса только теми складами, что есть в ВТ. Есть у кого еще какие мысли? Вопрос встал в процессе разработки отчета для пользователей с RLS в ролях, и, соответственно, в отчете задействованы эти самые таблицы с ограничениями.
#1 by Господин ПЖ
>Собственно вопрос, как от него избавиться? от кого?
#2 by UnsavedSoul
От <Объект не найден> в результате запроса
#3 by Господин ПЖ
>Пока пришло в голову только создание ВТ с разрешенными складами и ограничение результирующего запроса только теми складами, что есть в ВТ наложить на таблицу RLS нормальный - никак?
#4 by UnsavedSoul
Что значит "нормальный"?
#5 by Господин ПЖ
после наложения которого таких веток не возникает...
#6 by UnsavedSoul
В справочнике "Склады" 5 элементов, согласно условию RLS пользователю доступны только 3 из них. Результатом запроса "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ Справочник.Склады" будут 3 записи, удовлетворяющие условию. А результатом запроса к таблице остатков регистра накопления, в котором есть измерение "Склад" будут все(!) записи, вот только в поле Склад результата запроса для разрешенных складов будет ссылка на склад, а для тех,что не прошли проверку по RLS - <Объект не найден>. И если стоит задача пользователю с такими ограничениями сформировать отчет по остаткам, то как быть с этими записями <Объект не найден>?
#7 by ale-sarin
Так на регистр еще надо РЛС наложить. или положить. или покласть.
#8 by Maxus43
ещё РЛС на регистр покласть, чтоб не смогли читать остатки по этому складу
#9 by Wobland
юзеру количество кто-то запретил видеть?
#10 by Господин ПЖ
ты наложил rls на таблицу складов, что дает в таблице РН (а на нее свои права) "объект не найден" - ибо "перекрыты" поля формирующие представление ссылки... на РН твой RLS не действует что не понятно то....
#11 by UnsavedSoul
это-то мне как раз и понятно! Непонятно, как с этим быть? Неужели только RLS на регистр?
#12 by Wobland
ну почему только? ВТ со складами, пост-обработка запроса, раскрашивание результирующего ТабДокумента...
#13 by Maxus43
и так на все типовые отчеты...)
#14 by Wobland
ну надо как-то зряплату оправдывать ;)
#15 by Господин ПЖ
а что должно быть?
#16 by ale-sarin
А че смущает? Типовые гляньте.
#17 by Жан Пердежон
еще вариант: добавь в запрос наименование склада
#18 by Wobland
типа, если ссылку запрещено читать, будем читать наименование?
#19 by Maxus43
да тож ничо вариант, типа в спсике мы видим, а вот зайти в элемент, подрихтовать - низя
#20 by Жан Пердежон
ссылку то как раз читать и не запрещено
#21 by UnsavedSoul
Хотелось бы убрать эти записи из результата зепроса.
#22 by Господин ПЖ
смысл глубинный... в списке склада нет, а данные видно?
#23 by Wobland
благословить?
#24 by Господин ПЖ
rls накладывай на РН нормальный... можно взять из типовой подходящий по смыслу шаблон если разрезов может быть несколько... или самому нарисовать
#25 by Жан Пердежон
сработает ограничение "Разрешенные"
#26 by UnsavedSoul
Нет, помочь подобрать инструмент.
#27 by Господин ПЖ
в каком месте?
#28 by Wobland
БСП
#29 by Maxus43
РЛС на регистр, говорили же ужо
#30 by fisher
RLS надо накладывать на все таблицы, к которым они должны применяться. В том числе и на регистры. Никакого интеллектуального "изъятия" записей, содержащих ссылки на неразрешенные записи в другой таблице платформа не делает.
#31 by fisher
Да! И про журналы тоже не забудь.
#32 by UnsavedSoul
Спасибо! Это вариант мне нравится больше: в таком случае вместо наименования получаем Null, а по нему уже отобрать никаких проблем, что на уровне запроса, что на уровне СКД.
#33 by Жан Пердежон
в запросе. но это скорее костыль, который можно использовать, если тс нельзя менять конфу
#34 by fisher
Отличный вариант. Вместо того, чтобы надежно и централизованно решить проблему раз и навсегда, будем всю жизнь в куче мест костыли втыкать.
#35 by Господин ПЖ
так себе вариант имхо... я такое делал в конфе, в которой наоборот надо было убрать лишнее, а поля формирующие ссылки были выведены из-под rls
#36 by UnsavedSoul
Спасибо! Поведение платформы в случае работы с RLS мне понятно, хотелось бы просто максимально быстрое решение в рамках разработки одного отчета. Согласен, однако в данном случае грамотная настройка RLS означает изменение всех объектов метаданных, ссылающихся на справочник Склады. Это нецелесообразно в рамках решения проблемы формирования одного отчета.
#37 by kiruha
Издеваешься ? Разрешенные склады во временную клади На регистр условие - склад из этой временной
#38 by Жан Пердежон
какая версия платформы? какой запрос? никаких доп.отборов по NULL быть не должно; в любом случае еще в самый правильный ответ был.
#39 by UnsavedSoul
8.2.19.83     ТоварыНаСкладахОстатки.Склад В складах RLS на ссылку с условием <code>ГДЕ Наименование <> "Склад Магазина №1"     И Наименование <> "Склад Магазина №2"</code>
#40 by fisher
<рука-лицо>
#41 by Wobland
различные сильно ускорит этот запрос, но какая в пень разница, когда ?..
#42 by UnsavedSoul
В итоге: 1. Единственный корректный вариант использования RLS - это настройка во всех таблицах, имеющих ссылки на таблицу с данными, к которым ограничиваем доступ; 2. Первый костыль. В запросе используем временную таблица с разрешенными записями, а потом фильтруем с помощью этих данных результирующий запрос; 3. Второй костыль. Выбираем в запросе любое поле из таблицы с RLS, получаем в результирующем запросе Null и фильтруем по нему.
#43 by UnsavedSoul
Всем откликнувшимся и действительно пытавшимся помочь - спасибо.
#44 by UnsavedSoul
Разумеется это просто запрос из головы, но выполнение которого приведет к аналогичному результату. К нему и применял советы, есличо.
#45 by Wobland
4. взывать к наименованию только под страхом лишения конечностей или суставов
#46 by kiruha
1)     .... ИЗ     РегистрНакопления.ТоварыНаСкладах.Остатки(,Склад В (Выбрать Склад ИЗ РазрешенныеСклады ) ) КАК ТоварыНаСкладахОстатки Этого достаточно . Вот если есть ограничение более сложное Организация + Склад - то придется еще спец регистр заводить 2) Либо РЛС на регистр
#47 by fisher
В самописках, если количество объектов доступа небольшое а используется много где (склады, подразделения и т.п.) и вычисляется не так уж тривиально (группы пользователей и т.п.), я обычно при старте сеанса пихал объекты доступа пользователя в параметры сеанса типа ФиксированныйМассив. А во всех RLS простое условие на принадлежность массиву. ИМХО, шустрее этого ничего нету.
#48 by UnsavedSoul
Большое спасибо. Да, конечно, если все делать по-православному (согласно руководству разработчика), то именно такой инструментарий и следует использовать.
#49 by Лефмихалыч
заставь себя наложить rls и на регистр тоже. Или кого-нибудь еще заставь
#50 by Лефмихалыч
а если всё делать через жопу и с закрытыми глазами, то получается <объект не найден>. Это штука неприятная, "последствия" называется
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С