Имя: Пароль:
1C
1С v8
RLS ищу подсказку в реализации
,
0 Guzey
 
15.11.16
13:07
Добрый день Коллеги. Не могу понять как настроить ограничения динамического списка с помощью RLS. Есть два типа документа Док1 и Док2, есть регистр сведений(ЖурналДокументов), в котором данные документы хранят свои статусы(есть ресурс с типом булево). Есть две роли(роль1 и роль2), одна чтение/изменение Док1, вторая Док2 и есть роль(роль3) отвечающая за чтение регистра сведений.
Если делать динамический список на форме с запросом:

Выбрать Разрешенные
*
Из
РегистрСведений.ЖурналДокументов

То пользователь имеющий Роль3 и Роль1 или Роль2 будет видеть все строки, но часть объект будет "объект не найден". Тут для меня все понятно, т.к. роль3 разрешает читать весь регистр, но часть объектов регистра ограниченно другой ролью.

Как временное решение использовал запрос для ДС:

Выбрать Разрешенные
Ссылка
ПОМЕСТИТЬ ТЧ1
ИЗ
Документ.Док1 КАК Док1
;
Выбрать Разрешенные
Ссылка
ПОМЕСТИТЬ ТЧ2
ИЗ
Документ.Док2 КАК Док2
;
Выбрать
ЖурналДокументов.Документ,
ЖурналДокументов.Статус
ИЗ
РегистрСведений.ЖурналДокументов КАК ЖурналДокументов,
ТЧ1 КАК ТЧ1,
ТЧ2 КАК ТЧ2
ГДЕ
ЖурналДокументов.Документ В(&ТЧ1.Ссылка)
ИЛИ ЖурналДокументов.Документ В(&ТЧ2.Ссылка)

В этом случае получается все корректно, т.к. выбираются только те документы, что разрешены пользователю согласно настроенных ролей. Но увы это я понимаю все только в теории. А вот на практике не могу понять как настроить rls регистра сведений, что бы пользователю были видны только те строки, которые не ограниченны другими ролями.
з.ы. пример абстрактный, можно считать учебный, но суть вопроса отражает полностью.
1 Guzey
 
15.11.16
13:41
Так, писал на ходу, попробовал в живую сделать и понял, что динамические списки не могут работать в временными таблицами, тогда обходного варианта нету. Ищу подсказку как сделать это с помощью рлс.
2 azernot
 
15.11.16
13:46
>как настроить rls регистра сведений, что бы пользователю были видны только те строки, которые не ограниченны другими ролями

Никак. Механизм RLS не оперирует "другими ролями". Каждая роль - вещь в себе. Финальные ограничения пользователя складываются из всех ограничений доступных ролей по принципу "ИЛИ".
3 Guzey
 
15.11.16
14:15
(2) т.е. получается, что для данного регистра, требуется делать еще один ресурс, с типом перечисления "типы документов", настраивать RLS на типы документов и делать группы доступа согласно правам доступа для роли1 и роли2?
4 azernot
 
15.11.16
14:33
(3) Сформулируй задачу понятнее. Я если честно нифига не понял.

В общем и целом, для Роли1 нужно прописывать ограничение на регистр по виду документа 1, а для роли2 по виду документа 2. Роль3 - вообще не нужна.
Но это, как говорится втупую, исходя из твоего описания.

Ну или вводишь некий дополнительный параметр (например, праметр сеанса), и далее при начале работы системы, записываешь туда какую-то переменную, в зависимости от доступности роли1 и роли2, а в роли3 прописываешь ограничение исходя из значения этого парметра сеанса.
5 FIXXXL
 
15.11.16
15:05
(0) если я тебя правильно понял:
РАЗРЕШЕННЫЕ тащи из Документ.0001 и Документ.0002, через Объеденить
к документам левое соединение - РС с статусами

насколько тормознее будет - проверяй сам :)
6 FIXXXL
 
15.11.16
15:15
(5) + как вариант: вложенным запросом получаешь доступные по РАЗРЕШЕННЫЕ доки и внутреннее соединение вложенного запроса и РС, соединение отработает как фильтр

можешь получить массив документов и передать в параметр запроса динамосписка как отбор :)
7 Guzey
 
15.11.16
15:33
(4) понял все верно, но вопрос можно ли решить это с помощью РЛС, из в журнале не отражались документы, типы которых ограничены другими ролями
(5) динамический список не работает с объединениями и временными таблицами, только в 8.3.8 без режима совместимости, так что пока такой вариант не подходит
8 azernot
 
15.11.16
15:39
(7) Я же написал, что в явном виде - нет. Но обходной путь прост:
Ты в роли3 пишешь ограничение

ГДЕ
Регистратор Ссылка Документ.Док1 И &Роль1Доступна
ИЛИ
Регистратор Ссылка Документ.Док2 И &Роль2Доступна

Роль1Доступна, Роль2Доступна - параметры сеанса, которые ты инициализируешь исходя из доступности соответствующей роли для пользователя.
9 FIXXXL
 
15.11.16
15:43
(7) можно в РЛС
вдумчиво написать ограничение
я ж не вижу, как ты доки режешь
мож там все просто и надо только объединить условия из двух ролей
10 Guzey
 
15.11.16
18:19
(9) Доки ни как не режутся, просто разные типы документов. Если проще сформулировать вопрос, то можно ли добавить в рлс динамический отбор по типу документа?
11 FIXXXL
 
16.11.16
16:06
(10) не пробовал, но интересно: работает ли сравнение ССЫЛКА в языке РЛС запросов?

как вариант, завести перечисление ТипДокумента и писать его в твой РС, по перечислению построить РЛСзапрос, перечисление "прибить" к пользователю, проверять на
равенство Пользователь.ТипДокумента и СтрокаРС.ТипДокумента
12 FIXXXL
 
22.11.16
09:11