إدارة المستخدمين

تتيح واجهة برمجة التطبيقات لإدارة "إحصاءات Google" الإدارة الآلية لأذونات المستخدمين. يعدّ ذلك مفيدًا على وجه الخصوص للشركات الكبيرة التي لديها تعديلات متكرّرة على قوائم التحكّم بالوصول (ACL) لديها.

المقدمة

هناك ثلاثة موارد رئيسية تُستخدم للتحكم في الأشخاص الذين يمكنهم الوصول إلى الحساب أو الموقع أو الملف الشخصي (الملف الشخصي):

هناك أيضًا دعم خاص لعمليات كتابة أذونات المستخدمين.

أذونات المستخدمين

يمكن منح المستخدم، الذي يمثله حساب على Google، مستويات الوصول التالية إلى حساب أو موقع أو ملف شخصي في "إحصاءات Google":

  • MANAGE_USERS: يجب إرسال طلبات للكتابة إلى واجهات برمجة تطبيقات أذونات المستخدم.
  • EDIT - مطلوب لتعديل موارد إدارة البيانات
  • COLLABORATE
  • READ_AND_ANALYZE

للحصول على تفاصيل إضافية عن كل مستوى وصول، يُرجى الاطِّلاع على مقالة مركز مساعدة أذونات المستخدمين.

منح الأذونات

تعرض واجهة برمجة التطبيقات نوعَين من الأذونات: local وeffective. تنطبق الأذونات المحلية على الحساب أو الموقع أو الملف الشخصي المحدّد. عند منح الأذونات باستخدام واجهة برمجة التطبيقات، عليك استخدام السمة 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. ابحث عن المستخدمين الذين لديهم أذونات محلية واحذفهم. بالنسبة إلى كل رد تتلقّاه من عمليات القوائم الثلاث في الخطوة 1، كرِّر كل entityUserLink:
    • إذا تطابقت userRef مع المستخدم و في حال ضبط الأذونات local ثم على تنفيذ delete على المورد.

اطّلِع على مرجع واجهة برمجة التطبيقات للتعرُّف على تفاصيل عن طريقة delete لروابط مستخدِم حساب المستخدم وروابط مستخدِم الموقع الإلكتروني وموارد رابط عرض مستخدم (ملف شخصي).

تعديل بيانات مستخدم واحد

يمكن أيضًا تعديل أذونات المستخدم باستخدام Management API. على سبيل المثال، في ما يلي خطوات تغيير مستوى أذونات المستخدم من READ_AND_ANALYZE إلى EDIT، بافتراض أنك لا تعرف اسم الملف الشخصي أو رقم تعريفه:

  1. الحصول على جميع روابط المستخدمين لكل مستوى كيان: تنفيذ 3 طلبات من list للحساب:

    • list الكل accountUserLinks.
    • list الكل webpropertyUserLinks عن طريق ضبط المعلَمة webpropertyId على ~all.
    • list كل profileUserLinks عن طريق ضبط المعلَمات webpropertyId وprofileId على ~all.
  2. ابحث عن مستخدمين لديهم أذونات محلية وعدِّلهم. بالنسبة إلى كل ردّ تم استلامه من عمليات القوائم الثلاث في الخطوة 1، كرِّر كل entityUserLink:

    • في حال تطابق السمات userRef مع المستخدم وفي حال امتلاك المستخدم لأذونات local مع منحها إذن الوصول READ_AND_ANALYZE، يمكنك تنفيذ إذن update في المورد.

اطّلِع على مرجع واجهة برمجة التطبيقات للتعرُّف على تفاصيل عن طريقة update لروابط مستخدِم حساب المستخدم وروابط مستخدِم الموقع الإلكتروني وموارد رابط عرض مستخدم (ملف شخصي).

إضافة مستخدم واحد

لإضافة مستخدم إلى العرض الهرمي للحساب، على سبيل المثال إلى ملف شخصي، يجب اتّباع الخطوات التالية:

  1. استخدم Management API أو واجهة الويب لاسترداد معرّفات الحساب والموقع والملف الشخصي.
  2. أضف المستخدم عن طريق تنفيذ الطريقة insert للمورد profileUserLinks.

التجميع

هناك مكاسب في الأداء وحوافز في الحصة عند كتابة طلبات إذن إذن للكتابة في واجهة برمجة التطبيقات (حذفها وإدراجها وتحديثها).

  • يمكن أن تستفيد طلبات أذونات المستخدمين المجمّعة من عمليات التحسين التي تتم في الواجهات الخلفية، كما يمكنها تحقيق مكاسب كبيرة في الأداء.
  • يتم احتساب كل 30 طلبًا مجمّعًا لواجهة برمجة تطبيقات أذونات المستخدم كعملية كتابة واحدة فقط.
  • يمكن إرسال ما يصل إلى 300 طلب من واجهة برمجة التطبيقات لأذونات المستخدمين في طلب مجمّع، ما يسمح بزيادة عدد الطلبات في الثانية لكل مستخدم.

للاستفادة إلى أقصى حد من هذه المكاسب في الأداء، عليك اتّباع بعض الإجراءات.

  • يمكنك تجميع طلب البيانات من واجهة برمجة التطبيقات حسب المستخدم.
  • الطلبات المجمّعة لحساب واحد فقط ستؤدي طلبات الأذونات المجمّعة للمستخدمين مع أكثر من حساب واحد على"إحصاءات Google"إلى حدوث خطأ في الرسالة التالية: 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" من أجل ضبط موارد البيانات المختلفة.