Управление пользователями

API управления Google Analytics позволяет программно управлять разрешениями пользователей. Это особенно полезно для крупных компаний , чьи списки управления доступом (ACL) часто обновляются.

Введение

Существует три основных ресурса, которые используются для контроля доступа к учетной записи, ресурсу или представлению (профилю):

Существует также специальная поддержка пакетной обработки операций записи с правами пользователя.

Разрешения пользователя

Пользователю, представленному учетной записью Google , могут быть предоставлены следующие уровни доступа к учетной записи, ресурсу или представлению (профилю) Google Analytics:

  • MANAGE_USERS — необходимо для отправки запросов на запись в API разрешений пользователей.
  • EDIT — необходимо для редактирования ресурсов управления данными .
  • COLLABORATE
  • READ_AND_ANALYZE

Дополнительные сведения о каждом уровне доступа см. в статье Справочного центра «Разрешения пользователей» .

Назначение разрешений

API предоставляет два типа разрешений: local и effective . Локальные разрешения применяются к данной учетной записи, свойству или представлению (профилю). При назначении разрешений с помощью API вам следует использовать свойство permissions.local . Effective разрешения представляют собой разрешения, унаследованные от родительских ресурсов.

Унаследованные разрешения

Если пользователю предоставлено разрешение EDIT в учетной записи, все профили и свойства под этой учетной записью унаследуют эти разрешения; это будет представлено свойством Permissions.efficient .

Случаи использования

Разрешения пользователя в Management API можно использовать для решения следующих случаев:

Список всех пользователей учетной записи

Чтобы составить список всех пользователей учетной записи, включая всех пользователей, имеющих разрешения на любое свойство или представление (профиль) в учетной записи, выполните метод list ресурса accountUserLinks .

Обновление большого количества пользователей

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

  1. Получите все пользовательские ссылки для учетной записи :
    • list все accountUserLinks .
  2. Создайте запросы на обновление для каждого пользователя с соответствующими разрешениями:
    • update для каждой accountUserLink .
  3. Создайте один пакетный запрос для каждых 300 пользователей, содержащий указанные выше запросы на обновление:
    • batch вызов для каждых 300 пользователей.

Удаление пользователя из иерархии учетных записей

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

  1. Получите все пользовательские ссылки для каждого уровня сущности. Выполните 3 запроса list для учетной записи:
    • list все accountUserLinks .
    • list все webpropertyUserLinks установив для параметра webpropertyId значение ~all .
    • list все profileUserLinks установив для параметров webpropertyId и profileId значение ~all .
  2. Найдите и удалите пользователей с локальными разрешениями. Для каждого ответа, полученного от трех операций со списком на шаге 1, выполните итерацию по каждой entityUserLink :
    • если свойства userRef соответствуют пользователю и если установлены local разрешения , выполните delete ресурса.

Подробную информацию о методе delete ссылок пользователей учетной записи, ссылок пользователей веб-ресурсов и ссылок пользователей просмотра (профиля) см. в справочнике по API .

Обновление одного пользователя

Разрешения пользователя также можно обновить с помощью Management API. Например, шаги по изменению уровня разрешений пользователя с READ_AND_ANALYZE на EDIT (при условии, что вы не знаете имя или идентификатор представления (профиля)):

  1. Получите все ссылки пользователей для каждого уровня сущности. Выполните 3 запроса list для учетной записи:

    • list все accountUserLinks .
    • list все webpropertyUserLinks установив для параметра webpropertyId значение ~all .
    • list все profileUserLinks установив для параметров webpropertyId и profileId значение ~all .
  2. Найдите и обновите пользователей с локальными разрешениями. Для каждого ответа, полученного от трех операций со списком на шаге №1, выполните итерацию по каждой entityUserLink :

    • Если свойства userRef соответствуют пользователю и если у пользователя есть local разрешения с доступом READ_AND_ANALYZE , выполните update ресурса.

Подробную информацию о методе update ссылок пользователей учетной записи, ссылок пользователей веб-ресурсов и ссылок пользователей просмотра (профиля) см. в справочнике по API .

Добавить одного пользователя

Чтобы добавить пользователя в иерархию учетных записей, например в представление (профиль), необходимо выполнить следующие действия:

  1. Используйте Management API или веб-интерфейс для получения идентификаторов учетной записи, ресурса и представления (профиля).
  2. Добавьте пользователя, выполнив метод insert ресурса profileUserLinks .

Пакетирование

При пакетной обработке запросов API разрешений на запись (удаление, вставку, обновление) обеспечивается повышение производительности и увеличение квот.

  • Пакетные запросы разрешений пользователей могут использовать преимущества серверной оптимизации и обеспечить значительный прирост производительности.
  • Каждые 30 пакетных запросов API разрешений пользователя считаются только одной операцией записи .
  • В одном пакетном запросе можно выполнить до 300 запросов API разрешений пользователей, что обеспечивает более высокий лимит количества кадров в секунду для каждого пользователя .

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

  • Сгруппируйте свой запрос API по пользователю.
  • Только пакетные запросы для одного аккаунта. Пакетные запросы разрешений пользователей с использованием нескольких учетных записей Google Analytics приведут к ошибке со следующим сообщением: All batched requests must be under the same account .

Обработка ошибок

Все вызовы разрешений в пакетном запросе рассматриваются как одна транзакция. Это означает, что если какая-либо из мутаций ошибочна, никаких изменений не происходит. Причины, по которым мы рассматриваем их как один вызов:

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

Пример пакетной обработки — Python

Ниже приведен простой пример на Python пакетной обработки запросов на добавление списка пользователей в набор представлений (профилей). В примере циклически перебираются учетные записи авторизованного пользователя, и для каждой учетной записи создается один пакетный запрос. Внутри каждого пакетного запроса группируются все изменения для данного пользователя.


"""A simple example of Google Analytics batched user permissions."""
import json
from googleapiclient.errors import HttpError
from googleapiclient.http import BatchHttpRequest

def call_back(request_id, response, exception):
  """Handle batched request responses."""
  print request_id
  if exception is not None:
    if isinstance(exception, HttpError):
      message = json.loads(exception.content)['error']['message']
      print ('Request %s returned API error : %s : %s ' %
             (request_id, exception.resp.status, message))
  else:
    print response


def add_users(users, permissions):
  """Adds users to every view (profile) with the given permissions.

  Args:
    users: A list of user email addresses.
    permissions: A list of user permissions.
  Note: this code assumes you have MANAGE_USERS level permissions
  to each profile and an authorized Google Analytics service object.
  """

  # Get the a full set of account summaries.
  account_summaries = analytics.management().accountSummaries().list().execute()

  # Loop through each account.
  for account in account_summaries.get('items', []):
    account_id = account.get('id')

    # Loop through each user.
    for user in users:
      # Create the BatchHttpRequest object.
      batch = BatchHttpRequest(callback=call_back)

      # Loop through each property.
      for property_summary in account.get('webProperties', []):
        property_id = property_summary.get('id')

        # Loop through each view (profile).
        for view in property_summary.get('profiles', []):
          view_id = view.get('id')

          # Construct the Profile User Link.
          link = analytics.management().profileUserLinks().insert(
              accountId=account_id,
              webPropertyId=property_id,
              profileId=view_id,
              body={
                  'permissions': {
                      'local': permissions
                  },
                  'userRef': {
                      'email': user
                  }
              }
          )
          batch.add(link)

      # Execute the batch request for each user.
      batch.execute()

if __name__ == '__main__':

  # Construct a list of users.
  emails = ['ona@gmail.com', 'emi@gmail.com', 'sue@gmail.com', 'liz@gmail.com']

  # call the add_users function with the list of desired permissions.
  add_users(emails, ['READ_AND_ANALYZE'])

Следующие шаги

Далее мы рассмотрим, как использовать API управления Google Analytics для настройки различных ресурсов данных .