title: Data sandbox examples¶
Пример песочниц данных¶
Песочницы данных (ограниченный доступ к данным) - это набор разрешений, позволяющих ограничивать пользователям доступ к различным данным в зависимости от их пользовательских атрибутов. Вы сможете:
Запрещать доступ к строкам, используя базовые возможности песочницы.
Запрещать доступ к столбцам, используя индивидуально настроив песочницу под свою задачу.
Настройка разрешений - это всегда утомительно, так что здесь мы даем несколько примеров, с чего вы можете начать. В примере рассматривается группа Customers, но всё это будет аналогично работать и с любой другой.
Простая настройка песочницы¶
В этом примере мы поместим в песочницу таблицу Orders так, что любой пользователь в группе Customers будет видеть только те строки этой таблицы, в которых значение в колонке User ID
соответствует пользовательскому атрибутуuser_id
.
Первым делом, мы должны убедиться, что пользователь в нашем примере имеет атрибут, который мы сможем использовать в создаваемом фильтре:
Потом перейдем в Панель Администрирования > Разрешения и кликнем на Просмотр таблиц рядом с Sample Database, чтобы увидеть разрешения, которые есть у наших групп пользователей в отношении таблиц этой базы данных. Мы хотим дать группе Customers ограниченный доступ к таблице Orders, поэтому кликаем на соответствующей клетке в таблице разрешений и выбираем Grant sandboxed access.
Первым делом Glarus BI спросит нас, хотим ли мы установить этой группе пользователей ограниченный доступ к этой базе данных. Это означает, что у них не будет полного доступа ко всем таблицам этой базы данных, что, собственно, нам и нужно.
Далее появится форма с вопросом, как мы хотим фильтровать таблицу для этих пользователей. Оставим значение по умолчанию. Ниже расположена область, где мы можем добавить наши фильтры. Мы хотим фильтровать данные по условию равенства значения в колонке User ID
таблицы Orders и атрибута user_id
, назначенного каждому пользователю. Для этого выберем эту колонку и этот пользовательский атрибут из выпадающих меню. Внизу экранной формы будут отображаться введенные нами параметры.
Нажимаем кнопку Готово, потом - Сохранить изменения в верхней части экрана, чтобы сохранить внесенные нами изменения. Если в будущем понадобится изменить то, как эта таблица должна фильтроваться для пользователей данной группы, просто кликнем на выпадающем списке Data access для этой группы и выберем Edit sandboxed access.
Чтобы проверить, правильно ли мы всё настроили, откроем новое окно браузера в режиме инкогнито и войдем в систему, используя тестовый аккаунт. Кликнем на Sample Database на главной странице, потом выберем таблицу Orders. Как видите, всё работает правильно: этот пользователь видит только те заказы, где поле User ID
равно 1, потому что у этого пользователя именно такое значение атрибута user_id
.
Если этот пользователь формирует какие-либо диаграммы (charts), информационные панели (dashboards) или автоматизированные рентгеновские исследования (X-ray explorations), включающие в себя данные с ограниченным доступом из таблицы Orders, то данные для их построения будут также соответствующим образом отфильтрованы, чтобы показать только те из них, к которым пользователю разрешен доступ.
При этом использование данных с ограниченным доступом не лишает пользователя возможности пользоваться всеми возможностями GlarusBI для исследования и визуализации доступных ему данных. Например, он может создать подобную диаграмму, показывающую разбивку своих заказов по типам продуктов:
Песочница с индивидуальными настройками¶
Как было сказано выше, второй способ - это создание песочницы с использованием сохраненного вопроса, чтобы определить, в каком виде отображать таблицу. Когда пользователь с ограниченным доступом к таблице обращается к ней с запросом - для него источником данных будет “за кадром” не таблица, а этот сохраненный вопрос.
Пример 1: скрываем колонки¶
В этом примере у меня есть таблица People и я хочу, чтобы пользователи из группы Marketing могли просматривать ее содержимое, но не видели столбцы с персональной информацией.
Для этого я создам запрос, которые вернет только те столбцы из этой таблицы, которые я хочу, чтобы они видели, а именно:
Теперь, перейдя в раздел Разрешения и назначив этой группе ограниченный доступ к этой таблице, я выберу вторую опцию и укажу сохраненный вопрос, который я только что создал:
Чтобы проверить, что всё настроено правильно, зайдем в систему под тестовым пользователем из группы Marketing. Открыв таблицу People, убедимся, что отображается не полное ее содержимое, а результаты фильтрующего вопроса:
Примечание: такая фильтрация также произойдет, когда пользователь с ограниченным доступом попытается просмотреть график, использующий данные из таблицы в песочнице. Если график использует данные из столбцов, не входящих в “песочную” версию таблицы, то для этого пользователя он построен не будет.
Пример 2: использование переменных в сохраненном вопросе¶
Для создания более мощных и гибких фильтров, вы можете в фильтрующих вопросах вместе с пользовательскими атрибутами использовать переменные.
В этом примере я предоставлю пользователям некоторой группы доступ к таблице Orders, указав доступные им столбцы, а также сделаю так, что они будут видеть только те строки, где значение в столбце Customer ID
будет равно пользовательскому атрибуту customer_id
.
Вот таблица, которую я собираюсь отфильтровать:
Я создам фильтрующий вопрос, который позволит мне скрыть от пользователей нужные колонки, а в добавленном разделе WHERE
будет указана переменная cid
, на которую я потом смогу ссылаться в своей песочнице. Вот как это будет выглядеть:
Код фильтрующего вопроса:
SELECT
id,
created_at,
product_id,
quantity,
total,
user_id
FROM
orders
WHERE user_id = {%raw%}{{cid}}{%endraw%}
Вернемся назад в раздел Разрешения, откроем форму настроек ограниченного доступа и выберем вторую опцию. Выбрав написанный нами фильтрующий вопрос, увидим дополнительную секцию настроек, где сможем связать переменную, указанную в созданном запросе, с пользовательским атрибутом:
Значение моего пользовательского атрибута определено как указано на фото ниже. Эту форму мы можем открыть, нажав на кнопку с тремя точками рядом с именем нужного пользователя в разделе People:
Теперь, войдя в систему под этим именем пользователя и открыв таблицу Orders
, я увижу только те колонки, которые были указаны в фильтрующем вопросе, и они отфильтрованы по условию, указанному в WHERE
: