Настройка RLS запросами с пользовательскими переменными
2 минутное чтение
Пользовательские переменные представляют атрибуты пользователя Аналитического портала. Они подразделяются на встроенные (системные, определяемые структурой метаданных Аналитического портала) и дополнительные (на усмотрение администратора Портала в зависимости от решаемых задач).
Настройка пользовательских переменных осуществляется администратором в блоке меню “Переменные” и в окне “Редактирование пользователя” (блок меню “Пользователи”).
Настройка RLS с использованием пользовательских переменных
Настройка RLS на основании значений пользовательских переменных предполагает ограничения значений набора данных путем наложения условий в запросе по значениям той или иной пользовательской переменной и описывается при создании набора данных аналитиком.
Предварительная подготовка данных
Для использования разделения доступа с использованием переменных, Набор данных должен содержать ключевое поле, по которому осуществляется фильтрация RSL (например, table.rslkey).
Пример
В источнике данных должна быть создана таблица соответствия атрибута пользователя, по которому предполагается вводить ограничения, и значений rslkey, к которым данному пользователю разрешен (запрещен) доступ. Например, таблица rlstable, содержащая поля rlstable.userid и rlstable.rslkey.
Пример
Такую таблицу можно создавать и редактировать при помощи ФВД.
Подготовка запроса для набора данных
К базовому запросу для получения данных из таблицы table необходимо добавить условие WHERE, фильтрующее строки, отвечающие условию выборки из таблицы rlstable по значению пользовательской переменной:
Базовый запрос (пример):
SELECT table.data, table.anotherdata FROM table
Модифицированный запрос (пример):
SELECT table.data, table.anotherdata FROM table
WHERE table.rslkey IN (SELECT rlstable.rslkey from rlstable WHERE rlstable.userid = $user.ID$)
Для каждого пользователя, авторизованного на Аналитическом портале и просматривающего отчет, значение $user.ID$ будет равно идентификатору этого конкретного пользователя, таким образом он увидит только те строки, которые ему предназначены. В нашем примере пользователю id 101 будут показаны только строки с rlskey = ‘Иванов’ (№ 1 и 2 в таблице table), пользователю id 102 - данные по Петрову, а id 100 увидит все строки таблицы table.
Используя диалект SQL источника данных, можно проектировать более сложные запросы для набора данных, накладывая как включающие (разрешающие), так и исключающие (запрещающие) фильтры, в том числе по нескольким пользовательским переменным (встроенным и дополнительным)