Quản lý người dùng

API Quản lý Google Analytics cho phép quản lý quyền của người dùng theo phương thức lập trình. Điều này đặc biệt hữu ích cho các công ty lớn thường xuyên có bản cập nhật cho danh sách kiểm soát quyền truy cập (ACL).

Giới thiệu

Có 3 tài nguyên chính được dùng để kiểm soát việc ai có thể truy cập vào một tài khoản, tài sản hoặc chế độ xem (hồ sơ):

Ngoài ra còn có tính năng hỗ trợ tạo lô đặc biệt cho các thao tác ghi quyền của người dùng.

Quyền của người dùng

Một người dùng (được đại diện bởi một Tài khoản Google) có thể được cấp các cấp truy cập sau đây vào tài khoản, tài sản hoặc chế độ xem (hồ sơ) Google Analytics:

  • MANAGE_USERS – Cần thiết để đưa ra yêu cầu ghi vào các API quyền của người dùng.
  • EDIT - Cần thiết để chỉnh sửa tài nguyên quản lý dữ liệu.
  • COLLABORATE
  • READ_AND_ANALYZE

Để biết thêm thông tin chi tiết về từng cấp truy cập, hãy xem bài viết Quyền của người dùng trong trung tâm trợ giúp.

Chỉ định quyền

API này hiển thị 2 loại quyền: localeffective. Quyền cục bộ áp dụng cho tài khoản, thuộc tính hoặc chế độ xem (hồ sơ) đã cho. Khi chỉ định quyền bằng API, bạn nên sử dụng thuộc tính permissions.local. Quyền Effective thể hiện những quyền được kế thừa từ tài nguyên mẹ.

Các quyền được kế thừa

Nếu một người dùng được cấp quyền EDIT trên một tài khoản, thì tất cả hồ sơ và tài sản trong tài khoản đó sẽ kế thừa quyền này; điều này sẽ được thể hiện bằng thuộc tính quyền.effective.

Trường hợp sử dụng

Quyền của người dùng trong API Quản lý có thể được sử dụng để giải quyết các trường hợp sử dụng sau:

Liệt kê tất cả người dùng của một tài khoản

Để liệt kê tất cả người dùng của một tài khoản, bao gồm tất cả người dùng có quyền đối với tài sản hoặc chế độ xem (hồ sơ) bất kỳ trong tài khoản, hãy thực thi phương thức list của tài nguyên accountUserLinks.

Cập nhật một số lượng lớn người dùng

Để cập nhật quyền cho nhiều người dùng, bạn nên sử dụng phương thức phân lô. Việc này không chỉ giúp tiết kiệm hạn mức mà còn giúp nâng cao hiệu suất đáng kể. Vui lòng xem phần bên dưới để biết thông tin đầy đủ. Các bước bắt buộc để thực hiện việc này đối với tài khoản là:

  1. Nhận tất cả các đường liên kết đến người dùng của tài khoản:
    • list tất cả accountUserLinks.
  2. Tạo yêu cầu cập nhật cho từng người dùng với các quyền thích hợp:
    • update cho mỗi accountUserLink.
  3. Tạo một yêu cầu theo lô cho mỗi 300 người dùng chứa các yêu cầu cập nhật nêu trên:
    • gọi batch cho mỗi 300 người dùng.

Xoá người dùng khỏi hệ phân cấp tài khoản

Để xoá tất cả các lần xuất hiện của một người dùng khỏi hệ phân cấp tài khoản (tức là tài khoản, tài sản và chế độ xem (hồ sơ)). Các bước cần thực hiện để thực hiện việc này là:

  1. Nhận tất cả đường liên kết đến người dùng ở từng cấp thực thể. Thực thi 3 yêu cầu list cho tài khoản:
    • list tất cả accountUserLinks.
    • list tất cả webpropertyUserLinks bằng cách đặt tham số webpropertyId thành ~all.
    • list tất cả profileUserLinks bằng cách đặt tham số webpropertyIdprofileId thành ~all.
  2. Tìm và xoá người dùng có quyền trên thiết bị. Đối với mỗi phản hồi nhận được từ 3 thao tác danh sách ở bước 1, hãy lặp lại qua từng entityUserLink:
    • nếu các thuộc tính userRef khớp với người dùng nếu quyền local được thiết lập, thì sẽ thực thi delete trên tài nguyên

Hãy xem Tài liệu tham khảo API để biết chi tiết về phương thức delete của tài nguyên Liên kết người dùng tài khoản, Liên kết người dùng thuộc tính web và Tài nguyên liên kết người dùng chế độ xem (Hồ sơ).

Cập nhật một người dùng

Quyền của người dùng cũng có thể được cập nhật bằng API Quản lý. Ví dụ: các bước để thay đổi cấp độ quyền của người dùng từ READ_AND_ANALYZE thành EDIT, giả sử bạn không biết tên hoặc mã nhận dạng (hồ sơ) của chế độ xem là:

  1. Nhận tất cả đường liên kết đến người dùng cho từng cấp thực thể Thực hiện 3 yêu cầu list cho tài khoản:

    • list tất cả accountUserLinks.
    • list tất cả webpropertyUserLinks bằng cách đặt tham số webpropertyId thành ~all.
    • list tất cả profileUserLinks bằng cách đặt tham số webpropertyIdprofileId thành ~all.
  2. Tìm và cập nhật người dùng có quyền cục bộ. Đối với mỗi phản hồi nhận được từ 3 thao tác danh sách ở bước 1, hãy lặp lại qua từng entityUserLink:

    • Nếu các thuộc tính userRef khớp với người dùng nếu người dùng có quyền local có quyền truy cập READ_AND_ANALYZE, thì sẽ thực thi update trên tài nguyên.

Hãy xem Tài liệu tham khảo API để biết chi tiết về phương thức update của tài nguyên Liên kết người dùng tài khoản, Liên kết người dùng thuộc tính web và Tài nguyên liên kết người dùng chế độ xem (Hồ sơ).

Thêm một người dùng

Để thêm người dùng vào hệ phân cấp tài khoản, chẳng hạn như vào chế độ xem (hồ sơ), bạn phải làm theo các bước sau:

  1. Sử dụng API quản lý hoặc Giao diện web để truy xuất ID cho tài khoản, thuộc tính và chế độ xem (hồ sơ).
  2. Thêm người dùng bằng cách thực thi phương thức insert của tài nguyên profileUserLinks.

Tạo lô

Có các ưu đãi về hiệu suất và hạn mức khi phân lô yêu cầu API quyền (xoá, chèn, cập nhật).

  • Các yêu cầu quyền người dùng theo lô có thể tận dụng tính năng tối ưu hoá phụ trợ và giúp tăng hiệu suất đáng kể.
  • Mỗi 30 yêu cầu API quyền của người dùng theo lô chỉ được tính là một thao tác ghi.
  • Tối đa 300 yêu cầu API quyền của người dùng có thể được thực hiện trong một yêu cầu hàng loạt, cho phép QPS giới hạn trên mỗi người dùng cao hơn.

Để tận dụng tối đa những mức tăng hiệu suất này, bạn nên làm một số việc.

  • Nhóm yêu cầu API theo người dùng.
  • Chỉ yêu cầu hàng loạt cho một tài khoản. Yêu cầu quyền người dùng theo lô có nhiều tài khoản Google Analytics sẽ dẫn đến lỗi với thông báo sau: All batched requests must be under the same account.

Xử lý lỗi

Tất cả lệnh gọi quyền trong một yêu cầu hàng loạt đều được coi là một giao dịch duy nhất. Điều này có nghĩa là nếu bất kỳ trường hợp đột biến nào là do lỗi, thì sẽ không có thay đổi nào được thực hiện. Lý do chúng tôi coi đây là một lệnh gọi duy nhất:

  • Bạn có thể cần chỉnh sửa nhiều lần để điều chỉnh quyền của một người dùng. Nếu một trong các nội dung chỉnh sửa không đúng định dạng, việc áp dụng một phần của lô đó có thể khiến quyền của người dùng ở trạng thái không mong muốn.
  • Bằng cách coi nội dung chỉnh sửa là một giao dịch duy nhất, chúng tôi sẽ tối ưu hoá lưu lượng truy cập và có thể giảm hạn mức bắt buộc cho cuộc gọi.

Ví dụ về việc tạo lô – Python

Dưới đây là một ví dụ đơn giản bằng Python về cách tạo hàng loạt các yêu cầu để thêm danh sách người dùng vào một nhóm chế độ xem (hồ sơ). Ví dụ này lặp lại qua các tài khoản cho người dùng được uỷ quyền và cho mỗi tài khoản sẽ tạo một yêu cầu hàng loạt. Trong mỗi đợt yêu cầu, hệ thống sẽ nhóm tất cả thay đổi cho một người dùng cụ thể.


"""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'])

Các bước tiếp theo

Tiếp theo, chúng ta sẽ tìm hiểu cách sử dụng API Quản lý Google Analytics để định cấu hình nhiều tài nguyên dữ liệu.