title: Data sandbox examples

Пример песочниц данных

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

Настройка разрешений - это всегда утомительно, так что здесь мы даем несколько примеров, с чего вы можете начать. В примере рассматривается группа Customers, но всё это будет аналогично работать и с любой другой.

Простая настройка песочницы

В этом примере мы поместим в песочницу таблицу Orders так, что любой пользователь в группе Customers будет видеть только те строки этой таблицы, в которых значение в колонке User ID соответствует пользовательскому атрибутуuser_id.

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

User details

Потом перейдем в Панель Администрирования > Разрешения и кликнем на Просмотр таблиц рядом с Sample Database, чтобы увидеть разрешения, которые есть у наших групп пользователей в отношении таблиц этой базы данных. Мы хотим дать группе Customers ограниченный доступ к таблице Orders, поэтому кликаем на соответствующей клетке в таблице разрешений и выбираем Grant sandboxed access.

Grant sandboxed access

Первым делом Glarus BI спросит нас, хотим ли мы установить этой группе пользователей ограниченный доступ к этой базе данных. Это означает, что у них не будет полного доступа ко всем таблицам этой базы данных, что, собственно, нам и нужно.

Confirm modalДалее появится форма с вопросом, как мы хотим фильтровать таблицу для этих пользователей. Оставим значение по умолчанию. Ниже расположена область, где мы можем добавить наши фильтры. Мы хотим фильтровать данные по условию равенства значения в колонке User ID таблицы Orders и атрибута user_id, назначенного каждому пользователю. Для этого выберем эту колонку и этот пользовательский атрибут из выпадающих меню. Внизу экранной формы будут отображаться введенные нами параметры.

Sandbox settings

Нажимаем кнопку Готово, потом - Сохранить изменения в верхней части экрана, чтобы сохранить внесенные нами изменения. Если в будущем понадобится изменить то, как эта таблица должна фильтроваться для пользователей данной группы, просто кликнем на выпадающем списке Data access для этой группы и выберем Edit sandboxed access.

Чтобы проверить, правильно ли мы всё настроили, откроем новое окно браузера в режиме инкогнито и войдем в систему, используя тестовый аккаунт. Кликнем на Sample Database на главной странице, потом выберем таблицу Orders. Как видите, всё работает правильно: этот пользователь видит только те заказы, где поле User ID равно 1, потому что у этого пользователя именно такое значение атрибута user_id.

Filtered table

Если этот пользователь формирует какие-либо диаграммы (charts), информационные панели (dashboards) или автоматизированные рентгеновские исследования (X-ray explorations), включающие в себя данные с ограниченным доступом из таблицы Orders, то данные для их построения будут также соответствующим образом отфильтрованы, чтобы показать только те из них, к которым пользователю разрешен доступ.

При этом использование данных с ограниченным доступом не лишает пользователя возможности пользоваться всеми возможностями GlarusBI для исследования и визуализации доступных ему данных. Например, он может создать подобную диаграмму, показывающую разбивку своих заказов по типам продуктов:

Filtered pie chart

Песочница с индивидуальными настройками

Как было сказано выше, второй способ - это создание песочницы с использованием сохраненного вопроса, чтобы определить, в каком виде отображать таблицу. Когда пользователь с ограниченным доступом к таблице обращается к ней с запросом - для него источником данных будет “за кадром” не таблица, а этот сохраненный вопрос.

Пример 1: скрываем колонки

В этом примере у меня есть таблица People и я хочу, чтобы пользователи из группы Marketing могли просматривать ее содержимое, но не видели столбцы с персональной информацией.

Original People table

Для этого я создам запрос, которые вернет только те столбцы из этой таблицы, которые я хочу, чтобы они видели, а именно:

Filtering question

Теперь, перейдя в раздел Разрешения и назначив этой группе ограниченный доступ к этой таблице, я выберу вторую опцию и укажу сохраненный вопрос, который я только что создал:

Sandbox options

Чтобы проверить, что всё настроено правильно, зайдем в систему под тестовым пользователем из группы Marketing. Открыв таблицу People, убедимся, что отображается не полное ее содержимое, а результаты фильтрующего вопроса:

Sandboxed results

Примечание: такая фильтрация также произойдет, когда пользователь с ограниченным доступом попытается просмотреть график, использующий данные из таблицы в песочнице. Если график использует данные из столбцов, не входящих в “песочную” версию таблицы, то для этого пользователя он построен не будет.

Пример 2: использование переменных в сохраненном вопросе

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

В этом примере я предоставлю пользователям некоторой группы доступ к таблице Orders, указав доступные им столбцы, а также сделаю так, что они будут видеть только те строки, где значение в столбце Customer ID будет равно пользовательскому атрибуту customer_id.

Вот таблица, которую я собираюсь отфильтровать:

Original Orders table

Я создам фильтрующий вопрос, который позволит мне скрыть от пользователей нужные колонки, а в добавленном разделе WHERE будет указана переменная cid, на которую я потом смогу ссылаться в своей песочнице. Вот как это будет выглядеть:

Filtering question

Код фильтрующего вопроса:

SELECT
  id,
  created_at,
  product_id,
  quantity,
  total,
  user_id
FROM
  orders
WHERE user_id = {%raw%}{{cid}}{%endraw%}

Вернемся назад в раздел Разрешения, откроем форму настроек ограниченного доступа и выберем вторую опцию. Выбрав написанный нами фильтрующий вопрос, увидим дополнительную секцию настроек, где сможем связать переменную, указанную в созданном запросе, с пользовательским атрибутом:

Sandboxing options

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

User attributes

Теперь, войдя в систему под этим именем пользователя и открыв таблицу Orders, я увижу только те колонки, которые были указаны в фильтрующем вопросе, и они отфильтрованы по условию, указанному в WHERE:

Results

Дополнительная документация