Настройка RLS запросами с пользовательскими переменными
2 минутное чтение
Пользовательские переменные представляют атрибуты пользователя Аналитического портала. Они подразделяются на встроенные (системные, определяемые структурой метаданных Аналитического портала) и дополнительные (на усмотрение администратора портала в зависимости от решаемых задач).
Настройка пользовательских переменных осуществляется администратором в блоке меню «Переменные» и в окне «Редактирование пользователя» (блок меню «Пользователи»).
Настройка RLS с использованием пользовательских переменных
Настройка RLS на основании значений пользовательских переменных предполагает ограничения значений набора данных путем наложения условий в запросе по значениям той или иной пользовательской переменной и описывается при создании набора данных аналитиком.
Предварительная подготовка данных
Для использования разделения доступа с использованием переменных, набор данных должен содержать ключевое поле, по которому осуществляется фильтрация RSL (например, table.rslkey
).
Пример 1:
В источнике данных должна быть создана таблица соответствия атрибута пользователя, по которому предполагается вводить ограничения, и значений rslkey
, к которым данному пользователю разрешен (запрещен) доступ. Например, таблица «rlstable», содержащая поля rlstable.userid
и rlstable.rslkey
.
Пример 2:
Такую таблицу можно создавать и редактировать при помощи ФВД.
Подготовка запроса для набора данных
К базовому запросу для получения данных из таблицы «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 источника данных, можно проектировать более сложные запросы для набора данных, накладывая как включающие (разрешающие), так и исключающие (запрещающие) фильтры, в том числе по нескольким пользовательским переменным (встроенным и дополнительным)