Quyền đối với mẫu tuỳ chỉnh phía máy chủ

Tài liệu này trình bày các quyền đối với mẫu tuỳ chỉnh phía máy chủ.


Mỗi quyền là:

  • Đã được các API yêu cầu kiểm tra.
  • Tự động phát hiện trong JavaScript hộp cát, dựa trên API được sử dụng. Điều này xảy ra khi chỉnh sửa được thực hiện trong trình chỉnh sửa mẫu tuỳ chỉnh (để nhanh chóng vòng lặp phản hồi) và khi mã được biên dịch (để xác thực rằng thực thi quyền).
  • Có thể chỉnh sửa trong trình chỉnh sửa mẫu tuỳ chỉnh, để làm cho quyền cụ thể hơn.
  • Có thể truy vấn trong JavaScript hộp cát thông qua API queryPermission.

access_bigquery

Tên hiển thị: Truy cập vào BigQuery

Nội dung mô tả: Cho phép truy cập vào BigQuery trên Google Cloud Platform.

Cấu hình: Tuỳ chọn để cho phép dự án, tập dữ liệu và bảng được chỉ định để sử dụng với BigQuery. Đặt cấu hình mã dự án là GOOGLE_CLOUD_PROJECT sẽ cho phép sử dụng môi trường GOOGLE_CLOUD_PROJECT làm mã dự án khi projectId bị loại trừ khỏi BigQuery API parameter.

Bên yêu cầu: BigQuery

Chữ ký truy vấn: queryPermission('access_bigquery', <operation>, <options>)

Lưu ý: <operation> là một chuỗi và có thể có các giá trị sau:

  • ghi

<options> là một đối tượng chứa các mục sau:

{
  'projectId': <project_id>,
  'datasetId': <dataset_id>,
  'tableId': <table_id>
}

Mã ví dụ

const BigQuery = require('BigQuery');
const queryPermission = require('queryPermission');

const connectionInfo = {
  'projectId': 'gcp-cloud-project-id',
  'datasetId': 'destination-dataset',
  'tableId': 'destination-table',
};

if (queryPermission('access_bigquery', 'write', connectionInfo)) {
  const rows = [{
    'column1': 'String1',
    'column2': 1234,
  }];
  const options = {
    'ignoreUnknownValues': true,
    'skipInvalidRows': false,
  };

  BigQuery.insert(connectionInfo, rows, options)
      .then(data.gtmOnSuccess, data.gtmOnFailure);
}

access_firestore

Tên hiển thị: Truy cập vào Google Firestore

Mô tả: Cho phép truy cập vào Google Firestore.

Cấu hình: Tuỳ chọn để cho phép dự án và đường dẫn được chỉ định (cú pháp ký tự đại diện) được hỗ trợ) để sử dụng với Firestore. Đặt mã dự án của GOOGLE_CLOUD_PROJECT sẽ cho phép sử dụng Biến môi trường GOOGLE_CLOUD_PROJECT làm mã dự án khi projectId bị loại trừ khỏi Firestore API parameter.

Bắt buộc theo: Firestore

Chữ ký truy vấn: queryPermission('access_firestore', <operation>, <options>)

Lưu ý: <operation> là một chuỗi và có thể có các giá trị sau:

  • đọc - Cấp quyền truy cập để đọc và truy vấn API
  • ghi – Cấp quyền truy cập để ghi API
  • đọc_ghi – Cấp quyền truy cập để đọc, ghi và truy vấn API

<options> là một đối tượng chứa các mục sau:

{
  'projectId': <project_id>,
  'path': <path>
}

Mã ví dụ

const Firestore = require('Firestore');
const queryPermission = require('queryPermission');

const options = {
  'projectId': 'gcp-cloud-project-id',
  'path': 'collection/document',
};

if (queryPermission('access_firestore', 'read', options)) {
  Firestore.read('collection/document', {
    projectId: 'gcp-cloud-project-id',
  }).then(data.gtmOnSuccess, data.gtmOnFailure);
}

access_response

Tên hiển thị: Truy cập phản hồi

Description: Truy cập vào nội dung, tiêu đề hoặc trạng thái của phản hồi.

Cấu hình: Tuỳ chọn để cho phép quyền truy cập bất kỳ hoặc quyền truy cập cụ thể nào, kèm theo các tuỳ chọn phụ cho kiểm soát quyền truy cập vào nhiều thành phần phụ.

Được yêu cầu bởi: setPixelResponse, setResponseBody, setResponseHeader, setResponseStatus

Chữ ký truy vấn: queryPermission('access_response', 'write', <component>[, <optional component name>])

Lưu ý: Quản lý việc có thể truy cập thành phần phản hồi HTTP gửi đi hay không.

Mã ví dụ

const queryPermission = require('queryPermission');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
if (queryPermission('access_response', 'write', 'header', 'Content-Type')) {
  setResponseHeader('Content-Type', 'text/plain');
}
if (queryPermission('access_response', 'write', 'body')) {
  setResponseBody('Not Found');
}
if (queryPermission('access_response', 'write', 'status')) {
  setResponseStatus(404);
}

access_template_storage

Tên hiển thị: Truy cập vào Bộ nhớ mẫu

Mô tả: Cho phép truy cập vào bộ nhớ tạm thời đối với các mẫu có thể duy trì trong suốt thời gian hoạt động của quy trình phía máy chủ.

Cấu hình: Không có

Bên yêu cầu: templateDataStorage

Chữ ký truy vấn: queryPermission('access_template_storage')

Mã ví dụ

const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
  const value = templateDataStorage.getItemCopy(key);
}

get_cookies

Tên hiển thị: Đọc(các) giá trị cookie

Mô tả: Đọc các giá trị của cookie có tên được chỉ định.

Cấu hình: Danh sách tên cookie được phép đọc.

Bên yêu cầu: getCookieValues

Chữ ký truy vấn: queryPermission('get_cookies', <name>)

Lưu ý: Quản lý việc có thể đọc cookie hay không, tuỳ thuộc vào tên cookie.

Mã ví dụ

const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
  cookieValues = getCookieValues(cookieName);
}

ghi nhật ký

Tên hiển thị: Nhật ký vào bảng điều khiển

Nội dung mô tả: Nhật ký vào bảng điều khiển dành cho nhà phát triển và chế độ xem trước của Trình quản lý thẻ.

Cấu hình: Tuỳ chọn để bật tính năng ghi nhật ký trong phiên bản phát hành công khai. Giá trị mặc định là chỉ bật tính năng ghi nhật ký trong gỡ lỗi/xem trước. Nếu quyền bị từ chối, logToConsole sẽ không gửi lỗi mà sẽ chặn thông báo nhật ký.

Bên yêu cầu: logToConsole

Chữ ký truy vấn: queryPermission('logging')

Lưu ý: Kiểm soát việc một mẫu tuỳ chỉnh có thể ghi nhật ký vào bảng điều khiển dành cho nhà phát triển hay không.

Mã ví dụ

const queryPermission = require('queryPermission');
const logToConsole = require('logToConsole');
// Note that it's fine to call log, since the log call will be ignored if
// logging isn't permitted in the current environment.
logToConsole('diagnostic info');

use_message

Tên hiển thị: Sử dụng tin nhắn

Mô tả: Gửi hoặc nhận tin nhắn bằng addMessageListener hoặc Các API sendMessage.

Cấu hình: Tuỳ chọn để chỉ định loại thông báo và mẫu có thể nghe, gửi hoặc cả hai.

Bắt buộc theo: addMessageListener, sendMessage

Chữ ký truy vấn: queryPermission('use_message', <usage>, <message type>)

Lưu ý: Cách sử dụng có thể là một trong các giá trị listen, send hoặc listen_and_send.

Mã ví dụ

const queryPermission = require('queryPermission');
const sendMessage = require('sendMessage');
if (queryPermission('use_message', 'send', 'set_cookie')) {
  sendMessage('set_cookie', {name: 'foo', value: 'bar'});
}

read_container_data

Tên hiển thị: Đọc dữ liệu vùng chứa

Mô tả: Đọc dữ liệu về vùng chứa.

Cấu hình: Không có.

Được yêu cầu bởi: getClientName, getContainerVersion

Chữ ký truy vấn: queryPermission('read_container_data')

Lưu ý: Kiểm soát việc mẫu tuỳ chỉnh có thể đọc dữ liệu vùng chứa hay không.

Mã ví dụ

const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
  return getContainerVersion();
}

read_event_data

Tên hiển thị: Đọc dữ liệu sự kiện

Nội dung mô tả: Đọc dữ liệu từ sự kiện.

Cấu hình: Tuỳ chọn cho phép mọi quyền truy cập hoặc quyền truy cập cụ thể do danh sách các đường dẫn khoá được phép kiểm soát (hỗ trợ cú pháp ký tự đại diện).

Được yêu cầu bởi: getAllEventData, getEventData

Chữ ký truy vấn: queryPermission('read_event_data'[, <optional key>])

Lưu ý: Kiểm soát việc một mẫu tuỳ chỉnh có thể đọc dữ liệu sự kiện tại một khoá cụ thể hay không đường dẫn (hoặc tất cả dữ liệu sự kiện, nếu không có đường dẫn khoá nào được cung cấp).

Mã ví dụ

const getAllEventData = require('getAllEventData');
const queryPermission = require('queryPermission');
if (queryPermission('read_event_data')) {
  return getAllEventData();
}
const getEventData = require('getEventData');
const queryPermission = require('queryPermission');
const keyPath = 'parentField.childField';
if (queryPermission('read_event_data', keyPath)) {
  return getEventData(keyPath);
}

read_event_metadata

Tên hiển thị: Đọc siêu dữ liệu sự kiện

Mô tả: Đọc siêu dữ liệu sự kiện trong Lệnh gọi lại sự kiện

Cấu hình: Không có

Bên yêu cầu: addEventCallback

Chữ ký truy vấn: queryPermission('read_event_metadata')

Lưu ý: Kiểm soát việc một mẫu tuỳ chỉnh có thể đọc siêu dữ liệu sự kiện trong lệnh gọi lại.

Mã ví dụ

const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
  addEventCallback((containerId, eventMetadata) => {
    // Read event metadata.
  });
}

read_request

Tên hiển thị: Đọc yêu cầu HTTP

Nội dung mô tả: Đọc tiêu đề của yêu cầu, tham số truy vấn, nội dung, đường dẫn hoặc địa chỉ IP từ xa.

Cấu hình: Tuỳ chọn để cho phép quyền truy cập bất kỳ hoặc quyền truy cập cụ thể nào, kèm theo các tuỳ chọn phụ cho kiểm soát quyền truy cập vào nhiều thành phần phụ.

Được yêu cầu bởi: extractEventsFromMpv1, extractEventsFromMpv2, getRemoteAddress, getRequestBody, getRequestHeader, getRequestPath, getRequestQueryParameter, getRequestQueryParameters, getRequestQueryString

Chữ ký truy vấn: queryPermission('read_request', <component>[, <optional component name>])

Lưu ý: Quản lý việc có thể truy cập thành phần phản hồi HTTP đến hay không.

Mã ví dụ

const queryPermission = require('queryPermission');
const getRequestBody = require('getRequestBody');
const getRequestHeader = require('getRequestHeader');
let body, contentType;
if (queryPermission('read_request', 'body')) {
  body = getRequestBody();
}
if (queryPermission('read_request', 'header', 'content-type')) {
  contentType = getRequestHeader('content-type');
}
if (body && contentType == 'application/json') { ... }

return_response

Tên hiển thị: Trả về phản hồi

Mô tả: Trả về phản hồi cho phương thức gọi.

Cấu hình: Không có

Bên yêu cầu: returnResponse

Chữ ký truy vấn: queryPermission('return_response')

Lưu ý: Quyền này không có trường nào để thu hẹp, và thường không được truy vấn cho.

run_container

Tên hiển thị: Chạy vùng chứa

Nội dung mô tả: Chạy vùng chứa với một sự kiện

Cấu hình: Không có

Bên yêu cầu: runContainer

Chữ ký truy vấn: queryPermission('run_container')

Lưu ý: Quyền này không có trường nào để thu hẹp, và thường không được truy vấn cho.

send_http

Tên hiển thị: Gửi yêu cầu HTTP

Nội dung mô tả: Gửi yêu cầu HTTP đến một URL đã chỉ định.

Được yêu cầu bởi: getGoogleScript, sendEventToGoogleAnalytics, sendHttpGet, sendHttpRequest

Chữ ký truy vấn: queryPermission('send_http', <url>)

Lưu ý: Quản lý việc có thể thực hiện yêu cầu HTTP hay không, tùy thuộc vào URL. Để đảm bảo kết nối an toàn, chỉ các URL bảo mật (HTTPS) mới được phép.

Mã ví dụ

const queryPermission = require('queryPermission');
const sendHttpGet = require('sendHttpGet');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_http', url)) {
  sendHttpGet(url);
}

send_pixel_from_browser

Tên hiển thị: Gửi pixel từ trình duyệt

Mô tả: Gửi yêu cầu GET đến một URL đã chỉ định từ trình duyệt.

Bên yêu cầu: sendPixelFromBrowser

Chữ ký truy vấn: queryPermission('send_pixel_from_browser', <url>)

Lưu ý: Quản lý việc yêu cầu có được gửi từ trình duyệt hay không, tuỳ thuộc vào URL.

Mã ví dụ

const queryPermission = require('queryPermission');
const sendPixelFromBrowser = require('sendPixelFromBrowser');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_pixel_from_browser', url)) {
  sendPixelFromBrowser(url);
}

set_cookies

Tên hiển thị: Đặt một cookie

Mô tả: Đặt cookie có tên và thông số đã chỉ định.

Cấu hình: Một bảng gồm các tên cookie được phép, mỗi tên có các lựa chọn không bắt buộc các quy định hạn chế về tên, miền, đường dẫn, thuộc tính secure và thời hạn.

Bắt buộc theo: setCookie

Chữ ký truy vấn: queryPermission('set_cookies', <name>, <options>)

Lưu ý: Chi phối việc một "Set-Cookie" cụ thể có thể thêm tiêu đề vào phản hồi, tùy thuộc vào tên cookie, miền, đường dẫn, thuộc tính secure và hết hạn.

Mã ví dụ

const queryPermission = require('queryPermission');
const setCookie = require('setCookie');
const options = {
  'domain': 'www.example.com',
  'path': '/',
  'max-age': 60*60*24*365,
  'secure': true
};
if (queryPermission('set_cookies', 'info', options)) {
  setCookie('info', 'xyz', options);
}

use_custom_private_keys

Tên hiển thị: Sử dụng khoá riêng tư tuỳ chỉnh

Nội dung mô tả: Sử dụng khoá riêng tư trong tệp khoá JSON để mã hoá các toán tử.

Cấu hình: Danh sách mã khoá được phép. Các mã này phải khớp với các khóa trong tệp khoá JSON được tham chiếu bởi biến môi trường SGTM_CREDENTIALS trên máy chủ.

Bên yêu cầu: hmacSha256

Chữ ký truy vấn: queryPermission('use_custom_private_keys', <key id>)

Lưu ý: Chi phối danh sách các khoá riêng tư được phép.

Mã ví dụ

const hmacSha256= require('hmacSha256');
const queryPermission = require('queryPermission');
const keyId = 'key1';

let result;
if (queryPermission('use_custom_private_keys', keyId)) {
  result = hmacSha256('my_data', keyId);
}

use_google_credentials

Tên hiển thị: Sử dụng thông tin xác thực mặc định của ứng dụng trên Google

Nội dung mô tả: Sử dụng thông tin xác thực mặc định trên Google để gọi điện đến Google API.

Cấu hình: Danh sách các phạm vi Google OAuth 2.0 được phép.

Bên yêu cầu: getGoogleAuth

Chữ ký truy vấn: queryPermission('use_google_credentials', <scopes>)

Lưu ý: Hạn chế các phạm vi được phép của Google OAuth 2.0 để sử dụng với Google API.

Mã ví dụ

const getGoogleAuth = require('getGoogleAuth');
const queryPermission = require('queryPermission');

const scopes = [
  'https://www.googleapis.com/auth/datastore'
];

let auth;
if (queryPermission('use_google_credentials', scopes)) {
  auth = getGoogleAuth(scopes);
}