Zarządzanie użytkownikami

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

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:

  1. Pobierz wszystkie linki użytkowników na koncie:
    • list wszystkie accountUserLinks.
  2. Utwórz żądania aktualizacji dla każdego użytkownika z odpowiednimi uprawnieniami:
    • update za każde accountUserLink.
  3. 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.

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ć:

  1. Pobieraj wszystkie linki użytkowników na każdym poziomie elementu. Wykonaj 3 żądania list dla konta:
    • list wszystkie accountUserLinks.
    • list wszystkie webpropertyUserLinks, ustawiając parametr webpropertyId na ~all.
    • list wszystkie profileUserLinks, ustawiając parametry webpropertyId i profileId na ~all.
  2. 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 uprawnienia local są ustawione, a następnie wykonuje delete na zasobie

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:

  1. Pobierz wszystkie linki użytkowników na każdym poziomie elementu Wykonaj 3 żądania list na koncie:

    • list wszystkie accountUserLinks.
    • list wszystkie webpropertyUserLinks, ustawiając parametr webpropertyId na ~all.
    • list wszystkie profileUserLinks, ustawiając parametry webpropertyId i profileId na ~all.
  2. 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 uprawnienia local z uprawnieniami dostępu READ_AND_ANALYZE, a następnie uruchom na zasobie polecenie update.

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:

  1. Za pomocą interfejsu API zarządzania lub interfejsu internetowego możesz pobierać identyfikatory konta, usługi i widoku (profilu).
  2. Dodaj użytkownika, wykonując metodę insert zasobu profileUserLinks.

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.