Interfejs Google Analytics Management API umożliwia automatyczne zarządzanie uprawnieniami użytkowników. Jest to szczególnie przydatne w przypadku dużych firm, które często aktualizują listy kontroli dostępu (ACL).
Wstęp
Do kontrolowania, kto ma dostęp do konta, usługi lub widoku (profilu), służą 3 główne zasoby:
Dostępna jest też specjalna obsługa grupowań w przypadku operacji zapisu w ramach uprawnień użytkowników.
Uprawnienia użytkownika
Użytkownikowi reprezentowanemu przez konto Google można przyznać następujące poziomy dostępu do konta, usługi lub widoku danych (profilu) Google Analytics:
MANAGE_USERS
– potrzebne do wysyłania żądań zapisu do interfejsów API uprawnień użytkownika.EDIT
– potrzebne do edytowania zasobów zarządzania danymi.COLLABORATE
READ_AND_ANALYZE
Więcej informacji o poszczególnych poziomach dostępu znajdziesz w artykule Uprawnienia użytkownika w Centrum pomocy.
Przypisywanie uprawnień
Interfejs API ujawnia 2 typy uprawnień: local
i effective
. Uprawnienia lokalne mają zastosowanie do danego konta, usługi lub widoku (profilu). Podczas przypisywania uprawnień za pomocą interfejsu API należy używać właściwości permissions.local
. Uprawnienia Effective
reprezentują uprawnienia odziedziczone z zasobów nadrzędnych.
Uprawnienia dziedziczone
Jeśli użytkownik otrzyma na koncie uprawnienie EDIT
, wszystkie profile i usługi z tego konta odziedziczą te uprawnienia. Będzie to reprezentowane przez właściwościpermissions.effective.
Przykłady zastosowań
Uprawnienia użytkowników w interfejsie Management API można wykorzystać do tych celów:
- Wyświetlanie listy wszystkich użytkowników konta
- Aktualizowanie dużej liczby użytkowników
- Usuwanie użytkownika z hierarchii konta
- Aktualizowanie pojedynczego użytkownika
- Dodawanie pojedynczego użytkownika
Wyświetlanie listy wszystkich użytkowników konta
Aby wyświetlić listę wszystkich użytkowników konta, w tym wszystkich użytkowników, którzy mają uprawnienia do dowolnej usługi lub widoku (profilu) na koncie, uruchom metodę list
zasobu accountUserLinks.
Aktualizowanie dużej liczby użytkowników
Jeśli chcesz zaktualizować uprawnienia dużej liczby użytkowników, zdecydowanie zalecamy użycie grupowania. Nie tylko pozwoli to zaoszczędzić limit, ale też znacznie zwiększy wydajność. Szczegółowe informacje znajdziesz w sekcji grupowania poniżej. Aby to zrobić na koncie:
- Pobierz wszystkie linki użytkowników na koncie:
list
wszystkieaccountUserLinks
.
- Utwórz żądania aktualizacji dla każdego użytkownika z odpowiednimi uprawnieniami:
update
za każdeaccountUserLink
.
- Utwórz jedno żądanie zbiorcze na każde 300 użytkowników zawierające podane wyżej żądania aktualizacji:
- wywołaj
batch
na każde 300 użytkowników.
- wywołaj
Usuwanie użytkownika z hierarchii konta
Usunięcie z hierarchii konta wszystkich wystąpień użytkownika (tzn. konta, usług i widoków (profili)). Aby to zrobić:
- Pobieraj wszystkie linki użytkowników na każdym poziomie elementu. Wykonaj 3 żądania
list
dla konta: - Znajdowanie i usuwanie użytkowników z uprawnieniami lokalnymi Dla każdej odpowiedzi otrzymanej z 3 operacji związanych z listą w kroku 1 powtórz wszystkie operacje
entityUserLink
:- jeśli właściwości
userRef
odpowiadają użytkownikowi, oraz jeśli uprawnienialocal
są ustawione, a następnie wykonujedelete
na zasobie
- jeśli właściwości
Szczegółowe informacje o metodach delete
służących do tworzenia połączeń użytkowników konta, linków użytkowników usługi internetowej i linków użytkowników do widoku danych (profil) znajdziesz w dokumentacji API.
Aktualizowanie pojedynczego użytkownika
Uprawnienia użytkowników możesz też aktualizować za pomocą interfejsu Management API. Jeśli na przykład nie znasz nazwy lub identyfikatora widoku danych (profilu), musisz wykonać następujące kroki, aby zmienić poziom uprawnień użytkownika z READ_AND_ANALYZE
na EDIT
:
Pobierz wszystkie linki użytkowników na każdym poziomie elementu Wykonaj 3 żądania
list
na koncie:Znajdź i zaktualizuj użytkowników z uprawnieniami lokalnymi. Dla każdej odpowiedzi otrzymanej w ramach 3 operacji związanych z listą w kroku 1 powtórz wszystkie operacje
entityUserLink
:- Jeśli właściwości
userRef
odpowiadają użytkownikowi, oraz użytkownik ma uprawnienialocal
z uprawnieniami dostępuREAD_AND_ANALYZE
, a następnie uruchom na zasobie polecenieupdate
.
- Jeśli właściwości
Szczegółowe informacje o metodach update
służących do tworzenia połączeń użytkowników konta, linków użytkowników usługi internetowej i linków użytkowników do widoku danych (profil) znajdziesz w dokumentacji API.
Dodawanie pojedynczego użytkownika
Aby dodać użytkownika do hierarchii konta, na przykład do widoku (profilu), wykonaj te czynności:
- Za pomocą interfejsu API zarządzania lub interfejsu internetowego możesz pobierać identyfikatory konta, usługi i widoku (profilu).
- Dodaj użytkownika, wykonując metodę
insert
zasobuprofileUserLinks
.
Grupowanie
W przypadku zbiorczego wysyłania żądań zapisu (usuwania, wstawiania, aktualizacji) do interfejsu API uprawnień stosowane są zachęty do zwiększenia wydajności i zachęcania do korzystania z limitów.
- Zbiorcze prośby o przyznanie uprawnień użytkowników mogą wykorzystać takie możliwości optymalizacji i osiągnąć znaczny wzrost wydajności.
- Każde 30 zbiorczych żądań uprawnień użytkownika do interfejsu API liczy się jako pojedyncza operacja zapisu.
- W ramach pojedynczego żądania zbiorczego można wysłać do 300 żądań do interfejsu API uprawnień użytkownika, co oznacza wyższy limit zapytań na użytkownika.
Aby w pełni wykorzystać potencjał wzrostu skuteczności, musisz wykonać kilka czynności.
- Pogrupuj żądania do interfejsu API według użytkownika.
- Tylko żądania zbiorcze dotyczące 1 konta. Zbiorcze prośby o uprawnienia użytkowników obejmujące więcej niż 1 konto Google Analytics spowodują wyświetlenie błędu z takim komunikatem:
All batched requests must be under the same account
.
Obsługa błędów
Wszystkie wywołania uprawnień w żądaniu zbiorczym są traktowane jako jedna transakcja. Oznacza to, że jeśli któraś z mutacji jest błędna, nie są wprowadzane żadne zmiany. Powody, dla których traktujemy je jako pojedyncze wywołanie, to:
- Aby zmienić uprawnienia pojedynczego użytkownika, konieczne może być wprowadzenie kilku zmian. Jeśli któraś z zmian ma nieprawidłowy format, zatwierdzenie części partii może spowodować, że uprawnienia użytkownika zmienią się w nieodpowiedni stan.
- Traktując zmiany jako jedną transakcję, optymalizujemy ruch i możemy zmniejszyć limit wymagany dla wywołania.
Przykład wsadowania – Python
Poniżej znajduje się prosty przykład w Pythonie pokazujący, jak grupować żądania w celu dodania listy użytkowników do zestawu widoków (profili). W tym przykładzie zapętla się lista kont autoryzowanego użytkownika i dla każdego konta tworzone jest jedno żądanie zbiorcze. W ramach każdego żądania zbiorczego grupuje wszystkie zmiany danego użytkownika.
"""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'])
Dalsze kroki
Następnie przyjrzymy się, jak za pomocą interfejsu Google Analytics Management API konfigurować różne zasoby danych.