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