Настройка RLS запросами с пользовательскими переменными

Пользовательские переменные представляют атрибуты пользователя Аналитического портала. Они подразделяются на встроенные (системные, определяемые структурой метаданных Аналитического портала) и дополнительные (на усмотрение администратора портала в зависимости от решаемых задач).

Настройка пользовательских переменных осуществляется администратором в блоке меню «Переменные» и в окне «Редактирование пользователя» (блок меню «Пользователи»).

см. Список встроенных пользовательских переменных

Настройка 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 источника данных, можно проектировать более сложные запросы для набора данных, накладывая как включающие (разрешающие), так и исключающие (запрещающие) фильтры, в том числе по нескольким пользовательским переменным (встроенным и дополнительным)