Имя: Пароль:
1C
1С v8
RLS ограничение доступа "В ИЕРАРХИИ"
0 SeriyP
 
29.03.17
14:11
УТ 10.3.41.1
Коллеги подскажите, как реализовать в Справочники.Номенклатура ограничение доступа на уровне записей, чтобы пользователи могли работать только с номенклатурой "в иерархии" определенной папки? Естественно понимаю, что RLS не поддерживает "В Иерархии" (а так хотелось), а только "В".
Я пробовал создать ПараметрыСеанса.ДоступныеПапкиНоменклатуры - ФиксированныйМассив, в нем - ссылка на корневую папку. В правах пользователя: ГДЕ Родитель В(&ДоступныеПапкиНоменклатуры), в полях ставил "Прочие поля", "Ссылка" - результат одинаков: вообще никакие папки из справочника не видны.
1 FIXXXL
 
29.03.17
14:13
(0) не взлетит
делай через РС
2 FIXXXL
 
29.03.17
14:13
но вообще задача - источник тормозов
3 SeriyP
 
29.03.17
14:15
(1) Что есть "РС"?
4 SeriyP
 
29.03.17
14:16
РегистрСведений?
5 FIXXXL
 
29.03.17
14:17
(4) да
6 SeriyP
 
29.03.17
14:18
Подскажи, куда копать!
7 FIXXXL
 
29.03.17
14:19
тебе надо "складировать" доступную (или запрещенную) номенклатуру в РС или в параметр сеанса (если изменения номенклатуры нечастые) и уже складированную использовать в запросе РЛС
8 SeriyP
 
29.03.17
14:21
Т.е. идем от обратного: запрещаем доступ ко всем папкам, кроме разрешенных?
9 Волшебник
 
модератор
29.03.17
14:22
(8) Это как раз прямой путь
10 FIXXXL
 
29.03.17
14:23
(8) тебе виднее, исходи из массы запрещено-разрешено
чего меньше - то и складируй
11 SeriyP
 
29.03.17
14:24
Хорошо. Тогда запрещаем доступ "иерархически" или все запрещенные нужно перечислить в Регистре или Параметре сеанса?
12 Волшебник
 
модератор
29.03.17
14:26
(11) В регистре права могут храниться и группы, но при запуске нужно заполнять параметр сеанса с учётом иерархии и в RLS проверять уже параметр сеанса.
13 FIXXXL
 
29.03.17
14:26
(11) складируешь список номенклатуры
как формировать список - твой код
т.е. при добавлении-изменении-удалении элементов справочника должен список складированный обновляться
14 youalex
 
29.03.17
14:26
можно иерархию развернуть в РС, и на него завязываться.
15 Волшебник
 
модератор
29.03.17
14:26
(12)+ Кстати, хорошо бы предусмотреть его обновление не только при запуске, но и при открытии справочника, например, потому что данные или права могут меняться.
16 Diman000
 
29.03.17
14:27
Тормозить все это будет...
RLS просто пишется, но медленно работает.
RLS это В ЛЮБОЙ запрос прикрутка твоего ограничения. Кроме привилегированного режима.
Для начала подумай может как-то без RLS обойтись...
17 Волшебник
 
модератор
29.03.17
14:27
(14) тогда её придётся обновлять. Бе...
18 youalex
 
29.03.17
14:31
(17) ну да, в подписках. Структура не так часто меняется, как правило. Места много не отъест.
19 azt-yur
 
29.03.17
14:36
(18) можно реализовать как
ГДЕ Родитель В (&ДоступныеПапкиНоменклатуры) ИЛИ Родитель.Родитель В (&ДоступныеПапкиНоменклатуры) ИЛИ Родитель.Родитель.Родитель В (&ДоступныеПапкиНоменклатуры)
и так на максимально разумное количество уровней
и переписывать регистр не придется
20 FIXXXL
 
29.03.17
14:40
(19) я бы не трогал папки совсем, только номенклатуру
21 azt-yur
 
29.03.17
14:44
(16) RLS-ом здорово разграничивать права на чтение объектов, чтобы недоступные даже не отображались, чего другими средствами и не добьешься. А если надо только запретить на запись, то с точки зрения скорости работы лучше использовать подписки на события.
22 youalex
 
29.03.17
14:46
(19)
РС - нужно будет писать только при изменении иерархии , а вот куча соединений в запросе по РЛС - будет постоянно

(20)
А если элемент перенесут в другую группу? Это тоже нужно будет отслеживать.
С параметрами сеанса будет вообще засада - в плане 1) их актуальности 2) быстродействия условия IN () при большом массиве.
23 Анютик
 
29.03.17
14:50
Вот тут хорошо описано, реализовывала по примеру
http://programmist1s.ru/nastroyka-rls-ogranichenie-dostupa-na-urovne-zapisey-1s/
24 Hmster
 
29.03.17
14:50
(0) что значит "могли рабтать", они не должны видеть или не должны ее в документы пихать?
Если ты закроешь ее через рлс, а баба Маня с полными правами создаст документ с обычной и запрещенной номенклатурой, то как с этим документом будут работать тем у кого есть ограничения?
25 SeriyP
 
29.03.17
15:05
(24) Не должны видеть. а в таком документе будет наверное - ""Объект не найден"?
26 Hmster
 
29.03.17
17:00
(25) не просто объект не найден, но и с документом скорее всего сделать ничего не смогут, и в отчетах будет весело. Особенно когда у разных людей начнет отчет по продажам не сходится.
27 Волшебник
 
модератор
29.03.17
20:36
(26) В этом случае в заголовке отчёта надо написать дисклаймер "ДАННЫЕ ОГРАНИЧЕНЫ ПРАВАМИ ДОСТУПА"
28 SeriyP
 
30.03.17
10:48
Всем спасибо за мнения!
Только вот начали углубляться и обобщать. а у меня ситуация попроще: в корне справочника Номенклатура заведено с десяток разных папок, а продавцы работают (= чтение/просмотр) только с корневой папкой "Товары" в которой еще около 1000 подпапок. Вот и нужно обеспечить, чтобы им лишнее "перед глазами не мелькало", когда они чек набивают или счет, или заказ. а то, что их база не пустит в какой-то отчет или не нужный им документ - нечего лазать.
29 Анютик
 
30.03.17
10:56
(28) а отбором в списке не проще будет решить? может даже и быстрее выйдет, чем с рлс. Раз именно для удобства, а не разграничения прав.
30 SeriyP
 
30.03.17
11:01
(29) Интересная мысль. Можно по подробнее?
31 Фрэнки
 
30.03.17
11:08
у вас режим работы программы в управляемых формах?
Ну так сделайте свою форму списка и форму выбора, в новой форме укажите в динамическом списке все нужные условия в запросе.
32 SeriyP
 
30.03.17
11:17
(31) Формы обычные
33 SeriyP
 
31.03.17
16:49
(29) В общем к чему пришел.
В процедуре ПередОткрытием ФормыСписка Справочники.Номенклатура
такое:
отбор.Ссылка.значение = Справочники.Номенклатура.НайтиПоНаименованию("Товары"); //это одна из корневых папок
Отбор.Ссылка.Использование = Истина;
Отбор.Ссылка.ВидСравнения  = ВидСравнения.ВИерархии;
В общем-то уже не плохо, но теперь в ФормеСписка остальные папки все равно отображаются - только пустые.
Помогите понять, можно ли в таком варианте не отображать остальные ненужные папки?
34 SeriyP
 
31.03.17
16:53
35 Михаил Козлов
 
31.03.17
16:56
(33) Доступ к справочнику может быть не только в форме списка.
Делал такое примерно как в (8).
Штатный механизм раздувал регистр прав доступа и тормозило. Теперь в регистре только папки - особых тормозов не заметно.
36 SeriyP
 
31.03.17
17:00
(35) Согласен. Но пока речь про ФормуСписка.
Показать, что в RLS в таком варианте можете?
37 Михаил Козлов
 
31.03.17
17:21
(36)
спр
ИЗ Справочник.Номенклатура КАК спр
ГДЕ НЕ &ТекущиеОграничения ИЛИ (
спр.Ссылка В
(ВЫБРАТЬ РАЗЛИЧНЫЕ Права.ОбъектДоступа
ИЗ РегистрСведений.ПраваДоступаПользователей КАК Права  
ГДЕ Права.Пользователь В (&ГруппыТекущегоПользователя)
)
ИЛИ спр.Родитель В
(ВЫБРАТЬ РАЗЛИЧНЫЕ Права.ОбъектДоступа
ИЗ РегистрСведений.ПраваДоступаПользователей КАК Права  
ГДЕ Права.Пользователь В (&ГруппыТекущегоПользователя)
И Права.ВидНаследованияПравДоступаИерархическихСправочников = ЗНАЧЕНИЕ(Перечисление.ВидыНаследованияПравДоступаИерархическихСправочников.РаспространитьНаПодчиненных)
)
ИЛИ спр.Родитель.Родитель В
(ВЫБРАТЬ РАЗЛИЧНЫЕ Права.ОбъектДоступа
ИЗ РегистрСведений.ПраваДоступаПользователей КАК Права  
ГДЕ Права.Пользователь В (&ГруппыТекущегоПользователя)
И Права.ВидНаследованияПравДоступаИерархическихСправочников = ЗНАЧЕНИЕ(Перечисление.ВидыНаследованияПравДоступаИерархическихСправочников.РаспространитьНаПодчиненных)
)
ИЛИ спр.Родитель.Родитель.Родитель В
(ВЫБРАТЬ РАЗЛИЧНЫЕ Права.ОбъектДоступа
ИЗ РегистрСведений.ПраваДоступаПользователей КАК Права  
ГДЕ Права.Пользователь В (&ГруппыТекущегоПользователя)
И Права.ВидНаследованияПравДоступаИерархическихСправочников = ЗНАЧЕНИЕ(Перечисление.ВидыНаследованияПравДоступаИерархическихСправочников.РаспространитьНаПодчиненных)
)
ИЛИ спр.Родитель.Родитель.Родитель.Родитель В
(ВЫБРАТЬ РАЗЛИЧНЫЕ Права.ОбъектДоступа
ИЗ РегистрСведений.ПраваДоступаПользователей КАК Права  
ГДЕ Права.Пользователь В (&ГруппыТекущегоПользователя)
И Права.ВидНаследованияПравДоступаИерархическихСправочников = ЗНАЧЕНИЕ(Перечисление.ВидыНаследованияПравДоступаИерархическихСправочников.РаспространитьНаПодчиненных)
)
)

&ТекущиеОграничения - параметр сеанса (булево).
Иногда нужно "отключать" RLS, вот этим параметром и отключаем.
Конфа древняя (12 лет) на базе УТ 10.2.
Смысл тот же, что и в (8).
38 SeriyP
 
31.03.17
17:23
(37) Красота. Надо переварить. Спасибо!
39 rphosts
 
01.04.17
01:04
(33) через отчеты это не ограничит доступ
40 SeriyP
 
03.04.17
09:28
(39) Естественно не ограничит, там речь идет об ограничении отображения номенклатуры в списке.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.