Skip to content

Каждому свои данные ​

Типовая задача: партнёры, франчайзи или подрядчики должны видеть отчёт, но каждый — только свою часть. Один дашборд, один датасет, а цифры у всех разные.

Ниже — сквозной порядок: что завести, в каком порядке и как убедиться, что получилось. Разбор ведётся на примере «подрядчик видит заказы только своих клиентов»; для франчайзи подставьте магазин, для филиала — регион.

Настраивается всё на датасете — наборе таблиц, на котором построены виджеты и дашборды (датасеты).

Из чего складывается решение ​

Четыре вещи, и ни одна не заменяет другую:

ЧтоЗачемКто делает
Учётная записьВнешнему получателю нужен вход в платформу: публичная ссылка для этого не годится, по ней все зрители видят один и тот же срезАдминистратор платформы
Атрибут пользователяХранит, что именно «своё» у этого человека: список клиентов, магазинов, регионовАдминистратор платформы
Правило видимости строкСопоставляет атрибут с полем датасета и отрезает чужие строкиВладелец датасета или тот, у кого право «администрирование» на него
Доступ к объектуБез него человек не увидит вообще ничего, сколько ни настраивай правила: правило ограничивает, но не открываетВладелец объекта или администратор пространства

Шаг 1. Проверьте, где лежит поле-ограничитель ​

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

Посмотреть, где какое поле лежит, проще всего на схеме датасета — она показывает таблицы и их колонки, датасеты.

В примере ограничитель — customer_id в таблице заказов. Его и берём.

Если нужного поля в фактах нет

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

Шаг 2. Заведите учётную запись и атрибут ​

Администратор платформы создаёт запись получателя в разделе Пользователи и группы и там же задаёт ему атрибут: имя — customer_id, значения — номера клиентов, которые ему принадлежат.

Тип учётной записи для внешнего получателя — Исследователь: он видит дашборды и виджеты, но не может подключать источники. «Наблюдателя» брать не стоит: дашборды ему не открываются вовсе, останутся только отдельные виджеты — управление доступом.

Значений может быть несколько: атрибут хранит список, и правило раскрывает его в условие «поле входит в этот список».

Атрибуты заводит только администратор платформы

Аналитику они недоступны. Планируя разграничение, договоритесь заранее, кто и по какому списку будет их заполнять, — иначе правило окажется готовым, а данных для него не будет.

Шаг 3. Создайте правило видимости строк ​

Откройте датасет → Видимость данных → вкладка Строки (RLS) → Новое правило:

Поле формыЗначение в примере
Название«Подрядчик видит своих клиентов»
Вид правилаАтрибут пользователя
Объект и ПолеЗаказы → customer_id
Имя атрибута пользователяcustomer_id
Кому адресованоВсем
Правило включеноВключить — иначе правило сохранится, но ничего не закроет

Адресовать такое правило удобно всем: оно само разделит людей по значению атрибута, и заводить отдельное правило на каждого партнёра не придётся.

Новое правило создаётся выключенным

Переключатель в форме по умолчанию выключен. Заполнив форму и нажав Готово, вы получите сохранённое, но неработающее правило — данные останутся открытыми, и никакого сообщения об этом не будет. Проверьте переключатель в списке правил после сохранения.

У кого атрибут не заполнен, тот не увидит ничего

Правило «Атрибут пользователя», адресованное всем, действует и на сотрудников. Пока у аналитика или руководителя атрибут пуст, его виджеты на этом датасете возвращают ноль строк — молча, без сообщения.

Поэтому либо заполните атрибут всем, кто должен видеть данные целиком (перечислив в нём все значения), либо соберите внешних получателей в отдельную группу и адресуйте правило ей. Группа заводится в разделе Пользователи и группы, а в форме правила выбирается в поле Кому адресовано вместо варианта «Всем».

Шаг 4. Дайте доступ к объекту ​

Правило ограничивает, но не открывает. Пока получатель не участник пространства и у него нет прав на объект, он получает отказ 403.

Добавьте его участником общего пространства с ролью Наблюдатель — пространства — либо выдайте точечные права на нужный дашборд кнопкой Доступы на самом объекте — доступ к отдельному объекту.

Роль в пространстве и тип учётной записи называются одинаково, но это разные вещи: тип решает, какие разделы человеку видны вообще, роль — что он делает с объектами этого пространства. Для нашего получателя нужны оба: тип «Исследователь» и роль «Наблюдатель».

Шаг 5. Проверьте картину получателя ​

Сверьте два числа: что видит он и что должно быть по его части данных. Своими глазами этого не увидеть — понадобится либо запрос к API с параметром viewAsUserId, либо вход под служебной учётной записью; обе процедуры разбирает Проверка правил видимости.

Виджет под учётной записью подрядчика: только его клиенты

В примере подрядчику доступны три клиента из тридцати. Его виджет показывает шесть товаров на 3 942 800, и столько же даёт прямой запрос к источнику по этим клиентам — значит правило отрезало ровно чужое и ничего не потеряло из своего.

Не сходятся — ищите причину по шагам из проверки правил: там же разобрано, что означает пустой виджет, отказ 403 и лишняя строка с пустыми подписями.

Чего этим способом не сделать ​

  • Показать данные тому, у кого нет учётной записи. Публичная ссылка считает данные от имени того, кто её выпустил: все зрители видят один и тот же срез, и разделить их по правам она не может.
  • Скрыть отдельные колонки — это соседний механизм, видимость полей (CLS).
  • Ограничить строки по полю, которого нет в таблице фактов — правило скроет подписи, но не суммы; поле переносится на стороне источника, см. шаг 1.

Что дальше ​