ניהול משתמשים

Google Analytics Management API מאפשר ניהול פרוגרמטי של הרשאות משתמשים. האפשרות הזו שימושית במיוחד לחברות גדולות שמתעדכנות בתדירות גבוהה ברשימות של בקרת הגישה (ACL).

מבוא

יש שלושה משאבים עיקריים שמשמשים לקביעת האנשים שיכולים לגשת לחשבון, לנכס או לתצוגה מפורטת (פרופיל):

יש גם תמיכה בקיבוץ מיוחד לפעולות כתיבה של הרשאות משתמשים.

הרשאות משתמשים

משתמש, שמיוצג על ידי חשבון 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.

עדכון של מספר גדול של משתמשים

כדי לעדכן הרשאות למספר גדול של משתמשים, מומלץ להשתמש בקיבוץ. הפעולה הזו לא רק תחסוך במכסה אלא גם תהיה יעילה הרבה יותר. לפרטים מלאים, ניתן לעיין בקטע בנושא אצווה בהמשך. כדי לעשות זאת בחשבון, צריך לפעול לפי השלבים הבאים:

  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. איתור ומחיקת משתמשים עם הרשאות מקומיות. על כל תשובה שמתקבלת מ-3 הפעולות ברשימה שבשלב 1, עוברים על כל entityUserLink:
    • אם מאפייני userRef תואמים למשתמש וגם אם ההרשאות local מוגדרות אז מריצים delete במשאב

בחומר העזר בנושא API אפשר לקרוא פרטים נוספים על השיטה delete של קישורי משתמש בחשבון, קישורי משתמשים בנכס אינטרנט וצפייה בקישורי משתמשים (פרופיל).

עדכון של משתמש יחיד

ניתן לעדכן את הרשאות המשתמשים גם באמצעות ממשק ה-API לניהול. לדוגמה, השלבים לשינוי רמת ההרשאות של המשתמש מ-READ_AND_ANALYZE ל-EDIT, בהנחה שלא ידוע לכם השם או המזהה של התצוגה המפורטת (הפרופיל) הם:

  1. קבלת כל קישורי המשתמשים לכל רמת ישות ביצוע 3 בקשות list עבור החשבון:

    • list כל accountUserLinks.
    • list כל webpropertyUserLinks על ידי הגדרת הפרמטר webpropertyId ל-~all.
    • list כל profileUserLinks על ידי הגדרת הפרמטרים webpropertyId ו-profileId ל-~all.
  2. איתור משתמשים והגדרתם להם הרשאות מקומיות. עבור כל תגובה שמתקבלת מ-3 הפעולות ברשימה בשלב 1, יש לחזור על כל entityUserLink:

    • אם הנכסים של userRef תואמים למשתמש וגם אם למשתמש יש הרשאות local עם גישה READ_AND_ANALYZE, אז הוא יפעיל update במשאב.

בחומר העזר בנושא API אפשר לקרוא פרטים נוספים על השיטה update של קישורי משתמש בחשבון, קישורי משתמשים בנכס אינטרנט וצפייה בקישורי משתמשים (פרופיל).

הוספת משתמש יחיד

כדי להוסיף משתמש להיררכיית החשבון, למשל לתצוגה מפורטת (פרופיל), נדרשים השלבים הבאים:

  1. השתמש בממשק API לניהול או בממשק אינטרנט כדי לאחזר מזהים של החשבון, הנכס והתצוגה המפורטת (פרופיל).
  2. כדי להוסיף את המשתמש, צריך לבצע את השיטה insert של המשאב profileUserLinks.

אצווה

יש שיפורי ביצועים ותמריצים למכסות כאשר מקבצים בקשות לכתיבה (מחיקה, הוספה, עדכון) של הרשאות API.

  • בקשות מקובצות להרשאות משתמש יכולות לנצל אופטימיזציות של קצה עורפי ולהשיג שיפורי ביצועים משמעותיים.
  • כל 30 בקשות אצווה של API להרשאת משתמש נספרות כפעולת כתיבה יחידה בלבד.
  • אפשר לשלוח עד 300 בקשות API להרשאות משתמש בבקשה אחת, וכך לקבל QPS גבוה יותר לכל משתמש.

כדי להפיק את המרב מהשיפור בביצועים, יש כמה דברים שכדאי לעשות.

  • קיבוץ של בקשת ה-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'])

השלבים הבאים

בשלב הבא נסביר כיצד להשתמש ב-Google Analytics Management API כדי להגדיר משאבי נתונים שונים.