Консоль запросов RLS

Публикация № 390087

Разработка - Инструментарий разработчика - Консоль запросов

Поставка включает в себя конфигурацию, внешнюю обработку и файл описания в формате pdf (приведенный ниже). Консоль можно использовать при анализе текста запроса RLS, который будет выполнен к данным под конкретным пользователем.

Консоль запросов RLS

Изменения от 08.12.2019г. Изменена загрузка ролей из xml. Проверено и исправлено для версии платформы 8.3.14.1694. Во внешнюю обработку «Формирование текста запроса RLS» добавлена возможность посмотреть всех пользователей для выбранной роли.

Поставка включает в себя конфигурацию и внешнюю обработку.

Консоль можно использовать для анализа текста запроса RLS, который будет выполнен к данным под конкретным пользователем.

Например, мы смотрим ограничение доступа «Чтение» для некоторой роли типовой конфигурации 1С:

В зависимости от значения параметра сеанса (или может функциональной опции) будет вызван либо шаблон «ДляОбъекта», либо шаблон «ПоЗначениям».

Консоль позволяет преобразовать текст ограничения доступа в конкретное условие, которое будет добавлено к запросу при выборке данных из базы.

Порядок преобразования следующий:

  • Замена всех вызовов шаблонов на текст шаблонов. Поддерживается ситуация, когда в одном ограничении доступа указано несколько шаблонов, в том числе, содержащие именованные параметры;
  • Замена вызовов препроцессора значениями (#ИмяТекущейТаблицы и пр.);
  • Вычисление функций СтрСодержит() в тексте;
  • Вычисление инструкций #Если…#КонецЕсли и пр.

Для работы выгружаем описание ролей в xml файлы из конфигуратора с помощью опции «Выгрузить конфигурацию в файлы».

Если опции нет в интерфейсе, то её можно отобразить с помощью настройки главного окна.

Загружаем описание ролей в базу «Консоль запросов RLS».

После загрузки открываем форму консоли.

Здесь последовательно указываем поля для получения интересующего нас текста запроса. Нужно указать: конфигурацию, роль, объект метаданных, право и поля ограничений доступа (здесь для права «чтение» возможны варианты).  После указания автоматически заполняется поле «ограничение доступа», если для указанных значений оно существует.

Переходим на закладку «консоль» и нажимаем «сформировать». Получаем промежуточный текст запроса для внешней обработки.

Открываем обработку «Формирование текста запроса RLS» в нужной базе под нужным пользователем (это важно, т.к. в тексте запроса участвуют параметры сеанса и функциональные опции, настроенные для конкретного пользователя).

Вставляем текст из консоли на закладку «исходный текст», нажимаем «сформировать» и на закладке «модифицированный текст» получаем результат.

Скачать файлы

Наименование Файл Версия Размер
Консоль запросов RLS:

.rar 469,65Kb
08.12.19
23
.rar 469,65Kb 23 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. BigClock 24.08.15 10:55 Сейчас в теме
Несколько вопросов.
1. Чем отличается от http://infostart.ru/public/264989/
2. Можно ли адаптировать эту консоль для 8.3.5 или даже 8.2?
3. Можно ли адаптировать под выгрузку команды "Выгрузить файлы конфигурации"?
При использовании команды "Выгрузить конфигурацию в файлы" выгружается вся конфигурация,
а при использовании "Выгрузить файлы конфигурации" можно самому выбрать выгружаемые объекты.
ivanov660; +1 Ответить
2. Rioneri 71 24.08.15 22:54 Сейчас в теме
(1) BigClock,
1. Судя по описанию, в http://infostart.ru/public/264989/ разбирается текст шаблона с подстановкой параметров, а здесь - текст ограничения доступа, в котором шаблоны могут как присутствовать так и нет (также шаблонов может быть несколько), также здесь представлена конфигурация, а не внешняя обработка (это более удобно в ряде случаев);
2. Адаптировать под предшествующие версии можно, если переопределить СтрНайти();
3. Адаптировать под "Выгрузить файлы конфигурации" можно минимальными усилиями. Со стороны прав доступа выгружаемые конфигуратором файлы схожи.

P.S. Немного посмотрел на http://infostart.ru/public/264989/ оставил пару комментариев
3. kasper076 71 25.08.15 08:27 Сейчас в теме
1С:Предприятие 8.3 (8.3.6.2076)

Все заполнил согласно инструкции.
Вот что выходит при выборе "Поля ограничения доступа":


Ну и соответственно поле "Ограничение доступа" тоже не заполнено.
Что я делаю не так?
4. Rioneri 71 25.08.15 21:23 Сейчас в теме
(3) kasper076,
Всё так. Просто из БП 2.0 загрузилось не очень красиво (сам применял для ERP). При выборе из справочника "Поля ограничения доступа" нужно подобрать правильный элемент. Сделать это можно по коду элемента справочника, а код посмотреть с помощью регистра сведений «ограничения доступа».

http://imhocloud.com/image/7XSO

После выбора программа определить текст ограничения доступа, которое соответствует данному отбору.

http://imhocloud.com/image/7XSp
5. kasper076 71 25.08.15 22:05 Сейчас в теме
(4) спасибо. Направление ясно.
6. kasper076 71 26.08.15 09:51 Сейчас в теме
Вот вариант обработки для обычных форм версий 8.3.5 и младше. Переопределена функция "СтрНайти()":
Функция СтрНайти(Знач Строка, ПодстрокаПоиска, НаправлениеПоиска = Неопределено, НачальнаяПозиция = 1, НомерВхождения = 1)
	
	Строка			= ВРег(Строка);
	ПодстрокаПоиска	= Врег(ПодстрокаПоиска);
	
	Заглушка = "";
	ДлинаПодстроки	= СтрДлина(ПодстрокаПоиска);
	
	Для Инд = 1 По ДлинаПодстроки Цикл
		Заглушка = Заглушка + " ";
	КонецЦикла;
	
	Для Инд = 1 По НомерВхождения - 1  Цикл
		Позиция = Найти(Строка, ПодстрокаПоиска);
		Строка = Сред(Строка, 1, Позиция - 1) + Заглушка + Сред(Строка, Позиция + ДлинаПодстроки); 
	КонецЦикла;
	
	Возврат Найти(Строка, ПодстрокаПоиска);
	
КонецФункции	
Показать

Испугавшись праведного гнева гуру 1С, переписал с использованием регулярных выражений:
Функция СтрНайти(Знач Строка, ПодстрокаПоиска, НаправлениеПоиска = Неопределено, НачальнаяПозиция = 1, НомерВхождения = 1)
	
	RegExp = Новый COMОбъект("VBScript.RegExp");// создаем объект для работы с регулярными выражениями
	RegExp.MultiLine	= Истина;			// истина — текст многострочный, ложь — одна строка
	RegExp.Global		= Истина;			// истина — поиск по всей строке, ложь — до первого совпадения
	RegExp.IgnoreCase	= Истина;			// истина — игнорировать регистр строки при поиске
	Шаблон				= ПодстрокаПоиска;	//шаблон проверки 
	RegExp.Pattern		= Шаблон;    		// шаблон (регулярное выражение)
	Кол_воВхождений		= RegExp.Execute(Строка);
	Позиция = Кол_воВхождений.Item(НомерВхождения - 1).FirstIndex + 1;	
	
	Возврат Позиция;
	
КонецФункции	
Показать
Прикрепленные файлы:
ФормированиеТекстаЗапросаRLS_8_2.epf
defini; Леонов Александр; hdv; dyuha; Rioneri; +5 Ответить
7. premierex 28.08.15 08:08 Сейчас в теме
(6) kasper076, а вот так разве не проще?
Функция СтрНайти(Знач Строка, ПодстрокаПоиска, НаправлениеПоиска = Неопределено)
    Возврат Найти(Строка, ПодстрокаПоиска);
КонецФункции    


Вот описание возвращаемого значения функции Найти()

Тип: Число.
Позиция первого знака найденной подстроки. Нумерация символов в строке начинается с 1. Если строка не содержит указанной подстроки, то возвращается 0.
9. kasper076 71 29.08.15 22:13 Сейчас в теме
(7) premier, проще... Если, конечно, нужно найти первое вхождение. А если, к примеру, 3-е?
11. premierex 02.09.15 13:58 Сейчас в теме
(9) kasper076, согласен, если требуется необходимое по счёту вхождение найти.
Тогда следует ещё проверку ввести чтобы Кол_воВхождений.SubMatches.Count не оказалось меньше, чем НомерВхождения, иначе функция в исключение вылетит (если уж, испугавшись праведного гнева гуру 1С, писать :)).
kasper076; +1 Ответить
13. kasper076 71 03.09.15 12:49 Сейчас в теме
(11) premier, вот знал же, что гуру найдут к чему придраться )))) Пасиб. Исправлю обязательно.
12. premierex 02.09.15 14:41 Сейчас в теме
(9) kasper076, наврал немного: вместо Кол_воВхождений.SubMatches.Count следует использовать Кол_воВхождений.Count
8. alex_4x 81 28.08.15 18:07 Сейчас в теме
Вот это вещь!
Обязательно внимательно ознакомлюсь.
Для толстого клиента 8.2 уже не делаете?
10. kasper076 71 31.08.15 08:35 Сейчас в теме
Адаптировал под 8.3.4 Думаю и на 8.2 будет работать. Добавил отборы в форме "Консоль запросов". Терь если конфигураций несколько, то чуток удобнее заполнять настройки. Постараюсь еще под обычные формы переделать.
P.S. Автору еще раз спасибо. и за проделанную работу, и за знания полученные в процессе изучения этого продукта.
Прикрепленные файлы:
RLS_upd.cf
14. kalyaka 581 30.12.15 11:30 Сейчас в теме
Прошу автора выложить материалы в zip архиве, т.к. файл с расширением .exe не пропускают программы защиты
15. rygov 23.03.16 18:43 Сейчас в теме
Видимо в 8.3.7 поменяли структуры выгрузки конфигурации - надо исправить строку:
НачатьПоискФайлов(Новый ОписаниеОповещения("ОбработчикЗагрузкиФайлов", ЭтотОбъект, ПараметрыЗагрузки), Объект.КаталогВыгрузки, "Role.*Rights.xml");

на
НачатьПоискФайлов(Новый ОписаниеОповещения("ОбработчикЗагрузкиФайлов", ЭтотОбъект, ПараметрыЗагрузки), Объект.КаталогВыгрузки, "Rights.xml",Истина);
acanta; dr2c; +2 Ответить
16. Lupeykin 5 04.12.19 07:52 Сейчас в теме
После загрузки в консоль/настройки, роль пусто и поля ограничения пусто, ничего в этих справочниках нет.
Прикрепленные файлы:
17. Rioneri 71 06.12.19 09:30 Сейчас в теме
(16) ок, в выходные посмотрю
18. Rioneri 71 08.12.19 02:07 Сейчас в теме
(16) Ответ у rygov (15). После изменения структуры в 8.3.7 консоль не обновлялась. Сейчас обновил.
19. zeegin 85 17.12.19 18:46 Сейчас в теме
Кажется, в условиях динамического построения правил RLS в БСП это не нужно.
20. Rioneri 71 18.12.19 11:45 Сейчас в теме
(19) Динамика БСП - это запрос к регистрам сведений, заполненным на основании групп доступа? Так это и является объектом анализа.
21. zeegin 85 18.12.19 11:47 Сейчас в теме
(20) А что тут анализировать? Запрос всегда будет один и тот же, потому что шаблон РЛС один и тот же.
А если хочешь анализировать логику - в поставке БСП есть обработка УправлениеДоступом которая поможет.
22. Rioneri 71 18.12.19 14:45 Сейчас в теме
(21) Запрос будет разный, т.к. формирование текста запроса зависит от функциональных опций, параметров сеанса, настроек профилей и групп доступа.
23. zeegin 85 18.12.19 14:48 Сейчас в теме
(22) В новом RLS он всегда будет к одним и тем же регистрам ключей, который рассчитываются в фоне.
24. Rioneri 71 18.12.19 14:58 Сейчас в теме
Что такое регистры ключей? Что значит в новом RLS? RLS в платформе не менялся. Что может рассчитываться в фоне, когда проверяются права доступа?
25. user676486_dolya 21.02.20 18:08 Сейчас в теме
Открываем обработку «Формирование текста запроса RLS» в нужной базе под нужным пользователем

После нажимаем «сформировать» и получаем "Нарушение прав доступа!", т.к. нет доступа ко всем параметрам сеанса.
ЗКГУ редакция 3.1 (3.1.12.144)
27. zombi81 8 17.05.20 16:16 Сейчас в теме
(25) Получил аналогичную проблему в УТ 11-4. Есть несколько вариантов.
В процедуре СформироватьНаСервере делаем вызов процедуры УстановитьПривилегированныйРежим.

&НаСервере
Процедура СформироватьНаСервере(Знач ТекстЗапросаRLS)

	УстановитьПривилегированныйРежим(Истина);
	
	ТаблицаПараметров = ПолучениеПараметровЗапроса(ТекстЗапросаRLS);
	
	ВычислениеКонструкцийСтрСодержит(ТекстЗапросаRLS, ТаблицаПараметров);
	
	ВычислитьВсеИнструкцииПрепроцессора(ТекстЗапросаRLS, ТаблицаПараметров);

	УдалитьИЗТекстаПустыеСтроки(ТекстЗапросаRLS);
	
	МодифицированныйТекстЗапроса = ТекстЗапросаRLS;
	
	УстановитьПривилегированныйРежим(Ложь);
	
КонецПроцедуры
Показать

Теперь, если ее запустить через Файл Открыть, то привилегированный режим не установится, так устроена 1С.
1) Можно добавить обработку в конфигурацию.
2) Делаем расширение, добавляем в него эту обработку, добавляем в него роль "БазовыеПраваБСП" (или любую другую, которая есть у вашего пользователя) и даем права этой роли на использование/открытие обработки. Добавляем в расширение подсистему, которая есть у нужного вам пользователя, и включаем обработку в состав этой подсистемы. У расширения снимаем флаг "Безопасный режим".
28. zombi81 8 17.05.20 16:50 Сейчас в теме
(25)

3) Подключить по методике БСП. Для этого в модуль объекта обработки добавляем код

Функция СведенияОВнешнейОбработке() Экспорт
  
  ПараметрыРегистрации = Новый Структура;
  ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
  
  
  ПараметрыРегистрации.Вставить("Наименование", "Консоль RLS");
  ПараметрыРегистрации.Вставить("Версия", "1.0"); //"1.0"
  ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); // ВАЖНО ЛОЖЬ !!!!!
  ПараметрыРегистрации.Вставить("Информация", "Консоль RLS https://infostart.ru/public/390087/");
  ПараметрыРегистрации.Вставить("ВерсияБСП", "2.2.5.29");// не ниже какой версии БСП подерживается обработка

  ТаблицаКоманд = ПолучитьТаблицуКоманд();

  ДобавитьКоманду(ТаблицаКоманд,
          "Консоль RLS",
          "Консоль RLS",
          "ОткрытиеФормы",  
          Истина,//Показывать оповещение. 
          "");

  ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

  Возврат ПараметрыРегистрации;

КонецФункции

Функция ПолучитьТаблицуКоманд()

  Команды = Новый ТаблицаЗначений;
  Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
  Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

  Возврат Команды;

КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры
Показать

Далее меню НСИ и администрирование - Администрирование - Печатные формы, отчеты и обработки добавляем обработку, указываем к какой подсистеме она принадлежит и список пользователей, кому она будет доступна. Далее под нужным пользователем активизируем раздел подсистем, в которую добавили обработку и в меню Сервис - дополнительные обработки выбираем ее и запускаем.
30. Gvozdod 95 01.06.20 14:02 Сейчас в теме
(28)
Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");


ПараметрыРегистрации.Вставить("Наименование", "Консоль RLS");
ПараметрыРегистрации.Вставить("Версия", "1.0"); //"1.0"
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); // ВАЖНО ЛОЖЬ !!!!!
ПараметрыРегистрации.Вставить("Информация", "Консоль RLS https://infostart.ru/public/390087/");
ПараметрыРегистрации.Вставить("ВерсияБСП", "2.2.5.29");// не ниже какой версии БСП подерживается обработка

ТаблицаКоманд = ПолучитьТаблицуКоманд();

ДобавитьКоманду(ТаблицаКоманд,
"Консоль RLS",
"Консоль RLS",
"ОткрытиеФормы",
Истина,//Показывать оповещение.
"");

ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;

КонецФункции

Функция ПолучитьТаблицуКоманд()

Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

Возврат Команды;

КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры
Показать


И опять получаем "Нарушение прав доступа" :(
31. Rioneri 71 01.06.20 21:18 Сейчас в теме
(30)На всякий случай - после добавления функции СведенияОВнешнейОбработке() обработку нужно открывать не как внешнюю, а поместить в справочник дополнительных отчетов и обработок и не забыть вставки от (27) zombi81
32. Gvozdod 95 03.06.20 09:48 Сейчас в теме
26. zombi81 8 17.05.20 16:09 Сейчас в теме
Спасибо. Классная штука.
29. Rioneri 71 17.05.20 22:58 Сейчас в теме
(26)Пожалуйста, всё руки не доходят добавить привилегированный режим)
Оставьте свое сообщение

См. также

Информация о пользователях информационной базы (отчет на СКД)

Администрирование данных 1С Роли и права v8 v8::Права v8::СКД 1cv8.cf Абонемент ($m)

Два простых отчета по пользователям информационной базы и информации по ним.

1 стартмани

02.03.2020    4211    16    YPermitin    8    

Универсальная выгрузка данных и анализ

Обработки Универсальные обработки Обмен данными 1С Загрузка и выгрузка в Excel Обмен через XML Перенос данных из 1C8 в 1C8 Консоль запросов v8 1cv8.cf Абонемент ($m)

Обработка предназначена для выгрузки результатов выполнения запросов в различных форматах, а также анализа данных.

1 стартмани

27.11.2019    3915    15    kozusenok    0    

Установка даты запрета на любое число дней

Администрирование данных 1С Роли и права v8 УТ11 Абонемент ($m)

Примитивная обработка для установки даты запрета на произвольное число дней от текущей даты для всех пользователей

1 стартмани

29.10.2019    3810    2    Kutuzov    0    

RLS - дубли условий в запросах к СУБД

Практика программирования Роли и права v8 v8::Права 1cv8.cf Абонемент ($m)

"Подводные камни", возникающие при бездумном копировании ролей с ограничениями RLS, как это отражается на производительности, разбор примера и инструмент для анализа.

1 стартмани

07.10.2019    7654    18    geron4    4    

Наследование ролей в профилях групп доступа в конфигурациях на базе БСП

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права 1cv8.cf Абонемент ($m)

С помощью данной доработки можно создать новый профиль групп доступа, с наследованием ролей от базового (поставляемого) профиля. В созданном профиле можно добавить или исключить какие-либо роли относительно базового профиля.

1 стартмани

15.03.2019    8106    9    ids79    1