Безопасность на уровне строк для встроенных средств просмотра

Например, предположим, что у разработчика X есть веб-приложение для своих клиентов. Клиенты входят в приложение, используя свои учетные данные, и могут просматривать данные о продажах в разных магазинах. Каждый клиент имеет доступ к разному списку магазинов. Разработчик хотел бы встроить в свое приложение панель управления Looker Studio, чтобы при входе в систему клиент видел только данные о продажах тех магазинов, к которым у него есть доступ. Клиентам не нужно входить в свою учетную запись Google, чтобы этот процесс работал.

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

Требования

  • Зрители информационной панели войдут в стороннее приложение.
  • Приложение должно передать уникальный токен на панель управления Looker Studio через URL-адрес внедрения. Токен можно использовать либо для поиска информации о фильтре, либо зашифровать информацию о фильтре.
  • Соединитель сообщества должен иметь возможность преобразовывать токен в значения фильтра.

Ограничения

  • Если вы являетесь клиентом G Suite и ваш администратор отключил доступ к файлам Диска для всех, у кого есть ссылка, вы не сможете поделиться отчетом с пользователями за пределами вашей организации.

Решение

Выполните все следующие шаги, чтобы реализовать решение.

Создать токен пользователя в веб-приложении

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

Вам следует использовать токен для фильтрации соответствующих данных. Опции включают в себя:

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

Создайте новый соединитель сообщества

Чтобы приступить к работе, ознакомьтесь с тем, как работают соединители сообщества , и завершите кодовую лабораторную работу по соединителям сообщества . Используйте инструменты локальной разработки для создания соединителей для более быстрого и простого процесса разработки.

Напишите код разъема

  1. getConfig() должен возвращать хотя бы один элемент конфигурации. Это будет использоваться для захвата токена из параметров URL-адреса внедрения.

    function getConfig(request) {
      var cc = DataStudioApp.createCommunityConnector();
      var config = cc.getConfig();
    
      config
          .newTextInput()
          .setId('token')
          .setName('Enter user token');
    
      // TODO: Add additional config values if applicable for your connector
    
      config.setDateRangeRequired(false);
      config.setIsSteppedConfig(false);
    
      return config.build();
    }
    
  2. getData() будет иметь доступ к токену через объект request.configParams . Используйте токен для получения отфильтрованных данных или фильтрации существующих извлеченных данных.
    Согласно приведенному выше примеру, токеном будет request.configParams.token . В getData() токен передается конечной точке REST API для получения списка идентификаторов магазинов . Эти идентификаторы магазинов затем используются для построения SQL-запроса для получения данных о продажах.

    var STORE_ID_API = 'https://www.example.com/api/storeid';
    var QUERY_STRING_PREFIX = "SELECT StoreName, Sales from stores"
    
    function getData(request) {
      var token = request.configParams.token;
    
      var storeIds = getStoreIdList(token);
      var queryString = constructQueryString(storeIds);
      var fetchedData = fetchData(queryString);
    
      // rest of getData() implementation
    }
    
    function getStoreIdList(token) {
      var url = STORE_ID_API;
      var response = UrlFetchApp.fetch(url);
      var parsedResponse = JSON.parse(response);
      return parsedResponse.storeIds;
    }
    
    function constructQueryString(storeIds) {
      var storeIdString = storeIds.join(',');
      var queryString = QUERY_STRING_PREFIX
                        + ' WHERE storeId in ('
                        + storeIdString
                        + ')';
      return queryString;
    }
    

Создайте панель мониторинга

  1. Узнайте, как развертывания и версии работают для соединителей.
  2. Создайте производственное развертывание для соединителя.
  3. Используйте ссылку «Производственное развертывание», чтобы создать источник данных и отчет в Looker Studio.
  4. Для параметра конфигурации token выберите Разрешить зрителям отчетов изменять значения параметров .
  5. Поделитесь панелью управления с выбранными пользователями или с «Всем, у кого есть ссылка».
  6. Включите встраивание отчета.

Встройте панель управления в свою платформу

  1. Узнайте, как работают параметры URL-адреса отчета .
  2. Передайте динамически созданное значение токена с использованием параметров URL-адреса во встроенный отчет Looker Studio.
    Ваш URL-адрес для встраивания будет выглядеть примерно так:
    `https://lookerstudio.google.com/embed/reporting/REPORT_ID/page/PAGE_ID?config=%7B%22ds0%22%3A%7B%22token%22%3A%22TOKEN_VALUE%22%7D%7D

Рекомендации

  • Вам следует создать недолговечный токен.
  • Убедитесь, что на информационной панели нет утечки информации при просмотре с недействительным токеном.