Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Прошу помощи в расшифровке некоторых параметров и логики RLS запроса          
Talkman Подменю пользователя
сообщение 23.08.22, 20:28
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 189
Из: Черкассы
Спасибо сказали: 9 раз
Рейтинг: 9

УТ 2.3, платформа 8.3.16

Шаблон доступа на чтение типов цен номенклатуры для роли Пользователь. Смысл ограничения - для групп пользователей с выбранными типами цен в настройках дать доступ только к выбранным типам цен. После курения интернета разобрался, что доступ будет дан при условии, что выборка не пустая, иначе запрет. На данный момент запрос выглядит так.
Запрос
ТекущаяТаблица ИЗ Справочник.ТипыЦенНоменклатуры КАК ТекущаяТаблица
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
        СоставГруппы.Ссылка КАК ГруппаПользователей
    ИЗ
        Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
    ГДЕ
        СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
    ПО (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей)
ГДЕ (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ЛОЖЬ
            ИЛИ НЕ 1 В
                        (ВЫБРАТЬ ПЕРВЫЕ 1
                            1 КАК ПолеОтбора
                        ИЗ
                            РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
                        ГДЕ
                            НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
                            И ВЫБОР
                                КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ТипыЦен)
                                    ТОГДА ВЫБОР
                                            КОГДА 1 В
                                                    (ВЫБРАТЬ ПЕРВЫЕ 1
                                                        1
                                                    ИЗ
                                                        РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                                                    ГДЕ
                                                        НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.Ссылка
                                                        И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ТипыЦен)
                                                        И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей
                                                            ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)))
                                                ТОГДА ИСТИНА
                                            ИНАЧЕ ЛОЖЬ
                                        КОНЕЦ
                                ИНАЧЕ ИСТИНА
                            КОНЕЦ = ЛОЖЬ)
                И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL)


Вложенный запрос выдает единицу. Условие
 ГДЕ (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ЛОЖЬ ИЛИ НЕ 1 В ...
должно выдать ложь, чтобы доступа не было(?). По факту доступ есть. Код не мой, пробую разобраться. Подскажите что означают параметр
&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей
и как по такому параметру можно делать левое соединение . Скорее всего это обращение к одноименной константе, только тогда условие будет Истина, значение константы Истина. Меня смущает тот факт, что говорят, что раньше все работало, а сейчас перестало... Этот код должен работать?

Talkman @ Сегодня, 21:15 * ,
Уточнение. Условие будет не Истина, а наоборот Ложь, так как Константа не Ложь и Не 1 в 1 тоже Ложь. Остались вопрос как можно связывать таблицы по Истине, что будет в результате и почему может не работать ограничение...

Сообщение отредактировал Vofka - 24.08.22, 11:21

Vofka Подменю пользователя
сообщение 24.08.22, 13:59
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Цитата(Talkman @ 23.08.22, 21:28) *
должно выдать ложь, чтобы доступа не было(?)

По-моему, доступа не будет, если в результате RLS запроса вернется 0 записей.

Talkman Подменю пользователя
сообщение 24.08.22, 15:45
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 189
Из: Черкассы
Спасибо сказали: 9 раз
Рейтинг: 9

Vofka @ Сегодня, 14:59 * ,
Из различных мануалов прочитал, что доступа не будет, если выборка запроса будет не пустой. У меня вопрос как можно соединять таблицы по ИСТИНА и в каких случаях доступ может быть дан, если это ограничение доступа сработало. Что может перебить данное правило и дать доступ?

Vofka Подменю пользователя
сообщение 25.08.22, 9:13
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Цитата(Talkman @ 24.08.22, 16:45) *
У меня вопрос как можно соединять таблицы по ИСТИНА

Любые соединения таблиц работают если условие соединения возвращает истину.

В этом случае

|ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
|        СоставГруппы.Ссылка КАК ГруппаПользователей
|    ИЗ
|        Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
|    ГДЕ
|        СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
|    ПО (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей)


К основной таблице добавятся записи из справочника ПользователиГруппы по текущему пользователю
|    ГДЕ
|        СоставГруппы.Пользователь = &ТекущийПользователь

но ТОЛЬКО если ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ИСТИНА. Это значит, что к каждой строке из первой таблицы присоединятся все строки, которые получаются в результате этого запроса

|ВЫБРАТЬ РАЗЛИЧНЫЕ
|        СоставГруппы.Ссылка КАК ГруппаПользователей
|    ИЗ
|        Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
|    ГДЕ
|        СоставГруппы.Пользователь = &ТекущийПользователь

Спасибо сказали: Talkman,

Talkman Подменю пользователя
сообщение 25.08.22, 15:07
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 189
Из: Черкассы
Спасибо сказали: 9 раз
Рейтинг: 9

Vofka @ Сегодня, 10:13 * ,
Понял. Спасибо. А по поводу иерархии запретов доступа. Что может дать доступ к объекту, если RLS ограничение говорит, что доступ запрещен?

Разобрался. RLS ограничение доступа стояло на чтение объекта под ролью Пользователь. У юзера была выбрана еще одна роль с доступом на чтение без ограничений. Спасибо за внимание и помощь.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.04.24, 10:39
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!