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 .
Обновление большого количества пользователей
Для обновления разрешений для большого количества пользователей настоятельно рекомендуется использовать пакетную обработку; это не только сэкономит квоту, но и повысит производительность — подробную информацию см. в разделе пакетной обработки ниже . Для этого необходимо выполнить следующие действия для учетной записи:
- Получите все пользовательские ссылки для учетной записи :
-
list
всеaccountUserLinks
.
-
- Создайте запросы на обновление для каждого пользователя с соответствующими разрешениями:
-
update
для каждойaccountUserLink
.
-
- Создайте один пакетный запрос для каждых 300 пользователей, содержащий указанные выше запросы на обновление:
-
batch
вызов для каждых 300 пользователей.
-
Удаление пользователя из иерархии учетных записей
Чтобы удалить все вхождения пользователя из иерархии учетных записей (т. е. учетной записи, свойств и представлений (профилей)). Для этого необходимы следующие шаги:
- Получите все пользовательские ссылки для каждого уровня сущности. Выполните 3 запроса
list
для учетной записи: - Найдите и удалите пользователей с локальными разрешениями. Для каждого ответа, полученного от трех операций со списком на шаге 1, выполните итерацию по каждой
entityUserLink
:- если свойства
userRef
соответствуют пользователю и если установленыlocal
разрешения , выполнитеdelete
ресурса.
- если свойства
Подробную информацию о методе delete
ссылок пользователей учетной записи, ссылок пользователей веб-ресурсов и ссылок пользователей просмотра (профиля) см. в справочнике по API .
Обновление одного пользователя
Разрешения пользователя также можно обновить с помощью Management API. Например, шаги по изменению уровня разрешений пользователя с READ_AND_ANALYZE
на EDIT
(при условии, что вы не знаете имя или идентификатор представления (профиля)):
Получите все ссылки пользователей для каждого уровня сущности. Выполните 3 запроса
list
для учетной записи:Найдите и обновите пользователей с локальными разрешениями. Для каждого ответа, полученного от трех операций со списком на шаге №1, выполните итерацию по каждой
entityUserLink
:- Если свойства
userRef
соответствуют пользователю и если у пользователя естьlocal
разрешения с доступомREAD_AND_ANALYZE
, выполнитеupdate
ресурса.
- Если свойства
Подробную информацию о методе update
ссылок пользователей учетной записи, ссылок пользователей веб-ресурсов и ссылок пользователей просмотра (профиля) см. в справочнике по API .
Добавить одного пользователя
Чтобы добавить пользователя в иерархию учетных записей, например в представление (профиль), необходимо выполнить следующие действия:
- Используйте Management API или веб-интерфейс для получения идентификаторов учетной записи, ресурса и представления (профиля).
- Добавьте пользователя, выполнив метод
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 для настройки различных ресурсов данных .