С помощью Google Analytics Management API можно программно управлять разрешениями пользователей. Этот инструмент будет особенно полезен большим кампаниям с частым внесением изменений в списки контроля доступа.
Введение
Для контроля доступа к аккаунтам, ресурсам и представлениям (профилям) используется три основных ресурса:
- Ссылки на пользователей аккаунта
- Ссылки на пользователей веб-ресурса
- Ссылки на пользователей профиля
Кроме того, поддерживается специальное пакетирование запросов для операций записи разрешений.
Разрешения пользователей
Аккаунту Google пользователя может быть предоставлен один из следующих уровней доступа к аккаунту, ресурсу или представлению (профилю) Google Analytics:
MANAGE_USERS
– позволяет выполнять запросы на запись к API разрешений пользователей;EDIT
– позволяет изменять ресурсы управления данными;COLLABORATE
READ_AND_ANALYZE
Подробнее о каждом уровне доступа читайте в Справочном центре.
Предоставление разрешений
В API используются локальные (local
) и действующие (effective
) разрешения. Первые применяются к указанному аккаунту, ресурсу или представлению (профилю). Для назначения разрешений с помощью API необходимо использовать свойство permissions.local
. Разрешения effective
наследуются от родительских ресурсов.
Унаследованные разрешения
Разрешение на редактирование (EDIT
) на уровне аккаунта наследуется всеми его профилями и ресурсами. Действующие разрешения перечисляются в свойстве permissions.effective.
Примеры использования
Разрешения в Management API могут применяться при выполнении следующих задач:
- Получение списка всех пользователей аккаунта
- Изменение разрешений для большого количества пользователей
- Удаление пользователя из иерархии аккаунта
- Изменение разрешений для отдельного пользователя
- Добавление отдельного пользователя
Получение списка всех пользователей аккаунта
Чтобы вывести список всех пользователей аккаунта, включая тех, у кого есть разрешения на любые его ресурсы или представления (профили), используйте метод list
ресурса accountUserLinks.
Изменение разрешений для большого количества пользователей
При изменении разрешений для большого количества пользователей настоятельно рекомендуется использовать пакетирование – это эффективнее и позволяет уменьшить расход квот (подробнее читайте в разделе Пакетирование запросов). Чтобы выполнить эту операцию на уровне аккаунта, следуйте приведенным ниже инструкциям.
- Получите все пользовательские ссылки для аккаунта.
- Для этого примените метод
list
ко всем объектамaccountUserLinks
.
- Для этого примените метод
- Создайте запросы на изменение для всех пользователей с соответствующими разрешениями.
- Для этого примените метод
update
ко всем объектамaccountUserLink
.
- Для этого примените метод
- Создайте пакетированный запрос для каждых 300 пользователей с запросами на изменение из предыдущего пункта.
- Для этого примените метод
batch
для каждых 300 пользователей.
- Для этого примените метод
Удаление пользователя из иерархии аккаунта
Чтобы удалить пользователя со всех уровней иерархии (аккаунта, ресурсов и представлений (профилей)), выполните следующие действия:
- Получите все пользовательские ссылки для объектов каждого уровня. Для этого выполните три запроса
list
к объектам аккаунта: - Найдите и удалите пользователей с разрешениями local. Для каждого ответа, полученного после выполнения трех операций list на предыдущем шаге, проверьте все ресурсы
entityUserLink
:- если значения свойств
userRef
соответствуют пользователю, а также заданы разрешенияlocal
, то выполните над объектом операциюdelete
.
- если значения свойств
В справочнике по API вы найдете подробное описание метода delete
для объектов accountUserLinks, webpropertyUserLinks и profileUserLinks.
Изменение разрешений для отдельного пользователя
С помощью Management API также можно изменять разрешения для отдельного пользователя. Например, если вам неизвестны название и идентификатор представления (профиля), то изменить уровень разрешений с READ_AND_ANALYZE
на EDIT
можно так:
Получите все пользовательские ссылки для объектов каждого уровня. Выполните три запроса
list
к объектам аккаунта:Найдите и обновите список пользователей с разрешениями local. Для каждого ответа, полученного после выполнения трех операций list на предыдущем шаге, проверьте все ресурсы
entityUserLink
:- Если значения свойств
userRef
соответствуют пользователю, а также предоставлены разрешенияlocal
на уровнеREAD_AND_ANALYZE
, то примените к объекту методupdate
.
- Если значения свойств
В справочнике по API вы найдете подробное описание метода update
для объектов accountUserLinks, webpropertyUserLinks и profileUserLinks.
Добавление отдельного пользователя
Чтобы добавить пользователя в иерархию аккаунта, например на уровне представления (профиля), выполните следующие действия:
- С помощью Management API или веб-интерфейса получите идентификаторы аккаунта, ресурса и представления (профиля).
- Выполните метод
insert
ресурсаprofileUserLinks
.
Пакетирование запросов
Пакетирование запросов на запись к API, связанных с разрешениями (delete, insert, update), имеет ряд преимуществ с точки зрения эффективности и действующих ограничений:
- Пакетированные запросы оптимизируются на стороне сервера, что существенно повышает производительность.
- 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 apiclient.errors import HttpError from apiclient.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'])
Статьи по теме
Из следующей статьи вы узнаете, как настраивать различные ресурсы данных при помощи Google Analytics Management API.