1С УПП RLS Склады и подразделения в док. ПеремещениеТоваров. Не работает. #694644


#0 by golden-pack
1С 8.2 УПП RLS включен по складам и подразделениям(+ еще по многим другим, но это не имеет отношения к вопросу). Пользователь. Роль: Кладовщик (только в роли кладовщик есть права на чтение документа Перемещение товаров). На право чтение есть ограничение (RLS запрос) по организации, подразделению и складу. Пользователю назначено две группы пользователя: "ГруппаПоПодразделениям" - все склады запрещены и разрешено одно подразделение <ОсновноеПодразделение> и "ГруппаПоСкладам" - все подразделения запрешены и разрешен один склад "ОсновнойСклад". Далее по логике типовой конфигурации - "Если пользователь входит в несколько групп, то его права на уровне записей объединяются по всем группам. То есть права разных групп суммируются по логическому условию "ИЛИ"." Есть документ по подразделению - ОсновноеПодразделение и складу - Основной склад. Так вот пользователь не видит этот документ (право чтение) - т.е. не видит не в списке документов, из других источников ссылающихся на этот документ - <Объект не найден ...>. Относительно проверки - те ли подразделения и склады заданы, тот ли документ смотрите в той ли базе, точно ничего не натупили - ответ - все проверено, также в программе УПП работает 100 активных пользователей с разграниченными права, есть еще КА, БП с большим колчеством пользователей с разграниченными правами - все работает, проблема возникла только в данном конкретном случае. --------------------- Запрос RLS на право чтение из роли кладовщик для документа "ПеремещениеТоваров": --------------------- #Если &ИспользоватьОграничениеПоОрганизации ИЛИ &ИспользоватьОграничениеПоПодразделения ИЛИ &ИспользоватьОграничениеПоСклады #Тогда ТекущаяТаблица ИЗ     #ТекущаяТаблица КАК ТекущаяТаблица         ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ             СоставГруппы.Ссылка КАК ГруппаПользователей         ИЗ             Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL И     (НЕ 1 В                 (ВЫБРАТЬ ПЕРВЫЕ 1                     1                 ИЗ                     РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа                     ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей                            И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (                                                                                   ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка)                                                                                   )                                      И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL)) #КонецЕсли ---------------------------- Запрос очень бородат - из-за условия НЕ 1 В . Для отладки RLS запрос был переписан запрос на это: ВЫБРАТЬ     ТекущаяТаблица.Ссылка ИЗ     Документ.ПеремещениеТоваров КАК ТекущаяТаблица         ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ             СоставГруппы.Ссылка КАК ГруппаПользователей         ИЗ             Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ     НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL     И ТекущаяТаблица.Ссылка = &ДокПеремещниеТоваров     И НЕ 1 В             (ВЫБРАТЬ ПЕРВЫЕ 1                 1             ИЗ                 РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей                     ПО                                     ТОГДА НастройкиПравДоступаПользователей.ОбъектДоступа В (ТекущаяТаблица.СкладОтправитель, ТекущаяТаблица.СкладПолучатель)                 И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка), ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Подразделения), ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Склады))                 И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL ) ------------------------ Далее условие, которое "...1 НЕ 1 В( " было переписано на это: ------------------------ ВЫБРАТЬ     НазначениеВидовОбъектовДоступа.ГруппаПользователей, ИЗ                 ИЛИ НастройкиПравДоступаПользователей.Пользователь = &ГруппаПользователей2 ИЛИ НастройкиПравДоступаПользователей.Пользователь = &ГруппаПользователей3) ГДЕ     (НазначениеВидовОбъектовДоступа.ГруппаПользователей = &ГруппаПользователей1             ИЛИ НазначениеВидовОбъектовДоступа.ГруппаПользователей = &ГруппаПользователей2 ИЛИ НазначениеВидовОбъектовДоступа.ГруппаПользователей = &ГруппаПользователей3)     И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка), ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Подразделения), ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Склады))     И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL ------------------------ И вот в этом условие все отрабатывает корректно. Вся проблема в запросе RLS в условиях "НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей" и "НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей " Здесь по логике настройки прав доступа - должно отрабатывать условие или на все роли текущего пользователя, однако этого не проиcходит. Сейчас релиз платформы 8.2.19.76 - раньше таких ошибок замечено не было (однако группы пользователей таких способом тоже не рагзграничались), возможно эта версия платформы по другому формирует текст запрос в запрос SQL. Всмотритесь внимательно в условие запроса RLS. Вопрос - сталкивался ли кто-нибудь с этой проблемой ?
#1 by Apokalipsec
потому что выбрать ПЕРВЫЕ 1 - одна запись с обрезанным доступом к  подразделению/складу, ага.
#2 by golden-pack
Нет. Смысл условия сводится к тому - если запрос ничего не возвращает тогда - RLS право чтение разрешается
#3 by golden-pack
тут вопрос как этот бородатейший запрос в SQL преобразуется.
#4 by Apokalipsec
Возьми профайлер и посмотри. черепашка.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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