Видимость групп при включенном RLS

1. vitek77 09.01.20 16:03 Сейчас в теме
Стоит очень древняя, очень сильно переписанная конфигурация УТ 10.2
В свое время я эту конфигурацию перевел с платформы 8.1 на платформу 8.2
Конфигурация при переводе осталась в режиме совместимости "Версия 8.1"
Со временем я переделал все на перевод в режим совместимости "Версия Версия 8.2.13".
На новогодних перевел конфигурацию на новый режим совместимости.
В результате в одном справочнике перестало корректно работать RLS

В ограничении доступа написан такой код:
#Если &ИспользоватьОграниченияПравДоступаККонтрагентамНаУровнеЗапи­сей #Тогда
	ДокументацияПоСистеме ГДЕ ВЫБОР
			КОГДА &ЕстьПолныеПрава
					ИЛИ ДокументацияПоСистеме.ЭтоГруппа
				ТОГДА ИСТИНА
			ИНАЧЕ ВЫБОР
					КОГДА НЕ ДокументацияПоСистеме.ЕстьОграничениеПоДоступу
						ТОГДА ИСТИНА
					КОГДА &ОтделПользователя = ДокументацияПоСистеме.ГруппыДоступа.ГруппаПользователей
						ТОГДА ИСТИНА
					КОГДА &ТекущийПользователь = ДокументацияПоСистеме.ГруппыДоступа.ГруппаПользователей
						ТОГДА ИСТИНА
					ИНАЧЕ ЛОЖЬ
				КОНЕЦ
		КОНЕЦ
#КонецЕсли		
Показать


До перевода все работало без проблем, а сейчас пользователи ничего не видят, даже группы.
В чем может быть причина?
По теме из базы знаний
Найденные решения
10. vitek77 09.01.20 18:22 Сейчас в теме
Нашел, в чем проблема.
В справочнике есть таблица "ГруппыДоступа" и в эту таблицу указывают тех, кто имеет доступ к конкретному элементу.
В 8.1 по своему отрабатывала эту ситуацию и поэтому выводилось все, что нужно.
В 8.2 это исправили и в запрос попадали только те элементы, в таблице которых были нужные пользователи.
Пришлось на скорую руку переписывать.
Получилось вот такое:
#Если &ИспользоватьОграниченияПравДоступаККонтрагентамНаУровнеЗаписей #Тогда	
	ДокументацияПоСистеме ГДЕ ВЫБОР
			КОГДА &ЕстьПолныеПрава
				ТОГДА ИСТИНА
			КОГДА ДокументацияПоСистеме.ЭтоГруппа
				ТОГДА ИСТИНА
			ИНАЧЕ ВЫБОР
					КОГДА НЕ ДокументацияПоСистеме.ЕстьОграничениеПоДоступу
						ТОГДА ИСТИНА
					КОГДА ДокументацияПоСистеме.Ссылка В
							(ВЫБРАТЬ
								ДокументацияПоСистемеГруппыДоступа.Ссылка
							ИЗ
								Справочник.ДокументацияПоСистеме.ГруппыДоступа КАК ДокументацияПоСистемеГруппыДоступа
							ГДЕ
								(ДокументацияПоСистемеГруппыДоступа.ГруппаПользователей = &ОтделПользователя
									ИЛИ ДокументацияПоСистемеГруппыДоступа.ГруппаПользователей = &ТекущийПользователь))
						ТОГДА ИСТИНА
					ИНАЧЕ ЛОЖЬ
				КОНЕЦ
		КОНЕЦ
#КонецЕсли
Показать


Это заработало.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VmvLer 09.01.20 16:16 Сейчас в теме
из вероятного
параметры криво устанавливаются
если режим иерархии поставить "Список" и ничего не видно, то см. раздел невероятное

невероятное
СУБД кривая
Платформа кривая
Сам код кривой
3. vitek77 09.01.20 16:26 Сейчас в теме
(2)В коде прописано:
 КОГДА &ЕстьПолныеПрава
                    ИЛИ ДокументацияПоСистеме.ЭтоГруппа
                ТОГДА ИСТИНА

Т.е. для групп всегда должно чтение произойти, а его не происходит.

Открытие списка справочника происходит всегда в иерархическом просмотре.

Опять же раньше работало а сейчас перестало.
4. VmvLer 09.01.20 16:31 Сейчас в теме
(3) попробуйте убрать иерархический просмотр и потом по результатам думать дальше, хотя там думать только о главном - о корне.
5. VmvLer 09.01.20 16:36 Сейчас в теме
уберите ересь с ИЛИ. В этом случае оно неуместно

ГДЕ ВЫБОР
            КОГДА &ЕстьПолныеПрава ТОГДА ИСТИНА
            КОГДА  ДокументацияПоСистеме.ЭтоГруппа ТОГДА ИСТИНА
        ИНАЧЕ ВЫБОР....
6. vitek77 09.01.20 16:46 Сейчас в теме
(5)Пробовал, не работает.
Пустой справочник открывается.
Пока не испробовал все, что сам мог придумать сюда не писал.
7. VmvLer 09.01.20 17:15 Сейчас в теме
(6) создайте в конфигурации новые формы списков(временно)
- в виде простого списка без иерархии
- в виде дерева

с какой-то версии платформы в палитре свойств списка есть свойство "Отображать корень" с ним по играйте.

если результат нет - переходим к разделу неверятное и ждем потного гарри.
8. vitek77 09.01.20 17:20 Сейчас в теме
(7)Формы неуправляемые. Тут нет свойства отображать корень.

В справочнике контрагентов стоит точно такое же условие и все работает. Система видит все группы :(
9. vitek77 09.01.20 17:34 Сейчас в теме
Загрузил под полными правами, запустил консоль запросов.
создал вот такой запрос:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ДокументацияПоСистеме.Ссылка,
	ДокументацияПоСистеме.Код,
	ДокументацияПоСистеме.Наименование,
	ДокументацияПоСистеме.ЭтоГруппа
ИЗ
	Справочник.ДокументацияПоСистеме КАК ДокументацияПоСистеме
ГДЕ
	ВЫБОР
			КОГДА &ЕстьПолныеПрава
				ТОГДА ИСТИНА
			КОГДА ДокументацияПоСистеме.ЭтоГруппа
				ТОГДА ИСТИНА
			//ИНАЧЕ ВЫБОР
			//		КОГДА НЕ ДокументацияПоСистеме.ЕстьОграничениеПоДоступу
			//			ТОГДА ИСТИНА
			//		КОГДА &ОтделПользователя = ДокументацияПоСистеме.ГруппыДоступа.ГруппаПользователей
			//			ТОГДА ИСТИНА
			//		КОГДА &ТекущийПользователь = ДокументацияПоСистеме.ГруппыДоступа.ГруппаПользователей
			//			ТОГДА ИСТИНА
			//		ИНАЧЕ ЛОЖЬ
			//	КОНЕЦ
		КОНЕЦ
Показать


В параметрах указал ЕстьПолныеПрава = Ложь;

В результате в отчет вывелись все группы.

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

В параметрах указал:
ЕстьПолныеПрава - ложь
ОтделПользователя - указал отдел, который точно есть в одном из элементов
ТекущийПользователь - указал пользователя, который тоже присутствует.
Выполнил запрос. В результате не вывелось ни одной группы, а вывелись только элементы, для которых указан отдел или пользователь.

Куда пропали группы???
10. vitek77 09.01.20 18:22 Сейчас в теме
Нашел, в чем проблема.
В справочнике есть таблица "ГруппыДоступа" и в эту таблицу указывают тех, кто имеет доступ к конкретному элементу.
В 8.1 по своему отрабатывала эту ситуацию и поэтому выводилось все, что нужно.
В 8.2 это исправили и в запрос попадали только те элементы, в таблице которых были нужные пользователи.
Пришлось на скорую руку переписывать.
Получилось вот такое:
#Если &ИспользоватьОграниченияПравДоступаККонтрагентамНаУровнеЗаписей #Тогда	
	ДокументацияПоСистеме ГДЕ ВЫБОР
			КОГДА &ЕстьПолныеПрава
				ТОГДА ИСТИНА
			КОГДА ДокументацияПоСистеме.ЭтоГруппа
				ТОГДА ИСТИНА
			ИНАЧЕ ВЫБОР
					КОГДА НЕ ДокументацияПоСистеме.ЕстьОграничениеПоДоступу
						ТОГДА ИСТИНА
					КОГДА ДокументацияПоСистеме.Ссылка В
							(ВЫБРАТЬ
								ДокументацияПоСистемеГруппыДоступа.Ссылка
							ИЗ
								Справочник.ДокументацияПоСистеме.ГруппыДоступа КАК ДокументацияПоСистемеГруппыДоступа
							ГДЕ
								(ДокументацияПоСистемеГруппыДоступа.ГруппаПользователей = &ОтделПользователя
									ИЛИ ДокументацияПоСистемеГруппыДоступа.ГруппаПользователей = &ТекущийПользователь))
						ТОГДА ИСТИНА
					ИНАЧЕ ЛОЖЬ
				КОНЕЦ
		КОНЕЦ
#КонецЕсли
Показать


Это заработало.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот