הרשאות לשימוש בתבניות מותאמות אישית בצד השרת

במסמך הזה מפורטות ההרשאות לתבניות בהתאמה אישית בצד השרת.


כל הרשאה:

  • נבדקים על ידי ממשקי API שדורשים אותם.
  • זיהוי אוטומטי ב-JavaScript בארגז חול, על סמך ממשקי ה-API שבהם נעשה שימוש. זה קורה כשמבצעים שינויים בעורך התבניות בהתאמה אישית (כדי לקבל משוב מהיר) וכשמפעילים את הידור הקוד (כדי לוודא שההרשאות הנכונות נאכפות).
  • אפשר לערוך את ההרשאה הזו בעורך התבנית בהתאמה אישית, כדי שהיא תהיה ספציפית יותר.
  • אפשר לשלוח שאילתות ב-JavaScript בארגז חול באמצעות ה-API של queryPermission.

access_bigquery

שם לתצוגה: גישה ל-BigQuery

תיאור: הרשאה שמאפשרת גישה ל-BigQuery ב-Google Cloud Platform.

הגדרה: אפשרות לאפשר שימוש בפרויקטים, במערכי נתונים ובטבלאות ספציפיים ב-BigQuery. הגדרת מזהה הפרויקט בתור GOOGLE_CLOUD_PROJECT תאפשר להשתמש במשתנה הסביבה GOOGLE_CLOUD_PROJECT בתור מזהה הפרויקט כש-projectId לא נכלל ב-BigQuery API parameter.

חובה על פי: BigQuery

חתימה של שאילתה: queryPermission('access_bigquery', <operation>, <options>)

הערות: <operation> היא מחרוזת, והיא יכולה לקבל את הערכים הבאים:

  • write

<options> הוא אובייקט שמכיל את הפריטים הבאים:

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

קוד לדוגמה

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

השם המוצג: גישה ל-Google Firestore

תיאור: הרשאה שמאפשרת גישה ל-Google Firestore.

הגדרה: אפשרות לאפשר שילובים ספציפיים של פרויקט ונתיב (בתמיכה בתחביר של תווים כלליים לחיפוש) לשימוש ב-Firestore. הגדרת מזהה הפרויקט בתור GOOGLE_CLOUD_PROJECT תאפשר להשתמש במשתנה הסביבה GOOGLE_CLOUD_PROJECT בתור מזהה הפרויקט כש-projectId לא נכלל ב-Firestore API parameter.

חובה על פי: Firestore

חתימה של שאילתה: queryPermission('access_firestore', <operation>, <options>)

הערות: <operation> היא מחרוזת, והיא יכולה לקבל את הערכים הבאים:

  • read – הרשאה לקריאה ולשליחת שאילתות לממשקי API
  • write – הענקת גישה ל-API לכתיבה
  • read_write – הרשאה לקריאה, לכתיבה ולשליחת שאילתות לממשקי API

<options> הוא אובייקט שמכיל את הפריטים הבאים:

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

קוד לדוגמה

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

שם תצוגה: גישה לתגובה

תיאור: גישה לגוף התגובה, לכותרות או לסטטוס.

הגדרה: אפשרות לאפשר גישה כלשהי או גישה ספציפית, עם אפשרויות משנה לשליטה בגישה לרכיבי משנה שונים.

חובה לפי: setPixelResponse, ‏ setResponseBody,‏ setResponseHeader, ‏ setResponseStatus

חתימה של שאילתה: queryPermission('access_response', 'write', <component>[, <optional component name>])

הערות: קובעת אם אפשר לגשת לרכיב התגובה היוצאת של HTTP.

קוד לדוגמה

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

שם תצוגה: גישה לאחסון של תבניות

תיאור: הרשאה לגישה לאחסון זמני של תבניות שיכולות להישאר במהלך כל חיי התהליך בצד השרת.

הגדרה: ללא הגדרה

חובה על פי: templateDataStorage

חתימה של שאילתה: queryPermission('access_template_storage')

קוד לדוגמה

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

get_cookies

שם תצוגה: קריאת הערכים של קובצי ה-Cookie

תיאור: קריאת הערכים של קובצי ה-Cookie עם השם שצוין.

הגדרה: רשימה של שמות קובצי cookie שמותר לקרוא.

חובה על פי: getCookieValues

חתימה של שאילתה: queryPermission('get_cookies', <name>)

הערות: קובעת אם ניתן לקרוא קובץ cookie, בהתאם לשם שלו.

קוד לדוגמה

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

רישום ביומן

שם תצוגה: רישום במסוף

תיאור: רישום ביומן של Developer Console ושל מצב התצוגה המקדימה ב-Tag Manager.

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

חובה על פי: logToConsole

חתימה של שאילתה: queryPermission('logging')

הערות: קובעת אם תבנית בהתאמה אישית יכולה להיכנס ליומן במסוף הפיתוח.

קוד לדוגמה

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

שם תצוגה: שימוש בהודעות

תיאור: שליחה או קבלה של הודעות באמצעות ממשקי ה-API addMessageListener או sendMessage.

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

נדרש על ידי: addMessageListener, ‏ sendMessage

חתימה של שאילתה: queryPermission('use_message', <usage>, <message type>)

הערות: הערך של Usage יכול להיות listen,‏ send או listen_and_send.

קוד לדוגמה

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

שם מוצג: קריאת נתונים של מאגר תגים

תיאור: קריאת נתונים על המאגר.

הגדרה: אין.

נדרש על ידי: getClientName, ‏ getContainerVersion

חתימה של שאילתה: queryPermission('read_container_data')

הערות: קובע אם תבנית בהתאמה אישית יכולה לקרוא נתוני מאגר.

קוד לדוגמה

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

read_event_data

שם לתצוגה: קריאת נתוני אירוע

תיאור: קריאת נתונים מהאירוע.

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

נדרש על ידי: getAllEventData, ‏ getEventData

חתימה של שאילתה: queryPermission('read_event_data'[, <optional key>])

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

קוד לדוגמה

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

שם לתצוגה: קריאת מטא-נתונים של אירועים

תיאור: קריאת מטא-נתונים של אירוע בקריאות חוזרות (callbacks)

הגדרה: ללא הגדרה

חובה על פי: addEventCallback

חתימה של שאילתה: queryPermission('read_event_metadata')

הערות: קובעת אם תבנית בהתאמה אישית יכולה לקרוא מטא-נתונים של אירועים בקריאות חזרה (callbacks).

קוד לדוגמה

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

read_request

שם תצוגה: קריאת בקשת HTTP

תיאור: קריאת כותרות הבקשה, פרמטרים של שאילתות, גוף הבקשה, הנתיב או כתובת ה-IP המרוחקת.

הגדרה: אפשרות לאפשר גישה כלשהי או גישה ספציפית, עם אפשרויות משנה לשליטה בגישה לרכיבי משנה שונים.

נדרש על ידי: extractEventsFromMpv1, ‏ extractEventsFromMpv2,‏ getRemoteAddress, ‏ getRequestBody, ‏ getRequestHeader,‏ getRequestPath, ‏ getRequestQueryParameter, ‏ getRequestQueryParameters,‏ getRequestQueryString

חתימה של שאילתה: queryPermission('read_request', <component>[, <optional component name>])

הערות: קובעת אם אפשר לגשת לרכיב התגובה הנכנסת של HTTP.

קוד לדוגמה

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

שם תצוגה: הפונקציה מחזירה תגובה

תיאור: החזרת תגובה למתקשר.

הגדרה: ללא הגדרה

חובה על פי: returnResponse

חתימה של שאילתה: queryPermission('return_response')

הערות: אין להרשאה הזו שדות לצמצום, ובדרך כלל לא שולחים עליה שאילתה.

run_container

שם תצוגה: הפעלה של מאגר הנתונים

תיאור: הפעלה של מאגר התגים עם אירוע

הגדרה: ללא הגדרה

חובה על פי: runContainer

חתימה של שאילתה: queryPermission('run_container')

הערות: אין להרשאה הזו שדות לצמצום, ובדרך כלל לא שולחים עליה שאילתה.

send_http

שם מוצג: שליחת בקשות HTTP

תיאור: שליחת בקשת HTTP לכתובת URL שהוגדרה.

חובה לפי: getGoogleScript, ‏ sendEventToGoogleAnalytics,‏ sendHttpGet, ‏ sendHttpRequest

חתימה של שאילתה: queryPermission('send_http', <url>)

הערות: קובעת אם ניתן לשלוח בקשת HTTP, בהתאם לכתובת ה-URL. כדי להבטיח חיבור מאובטח, מותר להשתמש רק בכתובות URL מאובטחות (HTTPS).

קוד לדוגמה

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

שם מוצג: שליחת פיקסלים מדפדפנים

תיאור: נשלחת בקשת GET מהדפדפן לכתובת URL ספציפית.

חובה על פי: sendPixelFromBrowser

חתימה של שאילתה: queryPermission('send_pixel_from_browser', <url>)

הערות: קובעת אם אפשר לשלוח בקשה מהדפדפן, בהתאם לכתובת ה-URL.

קוד לדוגמה

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

שם תצוגה: הגדרת קובץ Cookie

תיאור: הגדרה של קובץ Cookie עם השם והפרמטרים שצוינו.

הגדרה: טבלה של שמות קובצי cookie מותרים, עם הגבלות אופציונליות על השם, הדומיין, הנתיב, המאפיין secure ותוקף התוקף.

חובה על פי: setCookie

חתימה של שאילתה: queryPermission('set_cookies', <name>, <options>)

הערות: קובעת אם אפשר להוסיף כותרת 'Set-Cookie' נתונה לתגובה, בהתאם לשם קובץ ה-cookie, לדומיין, לנתיב, למאפיין secure ולתוקף התפוגה.

קוד לדוגמה

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

שם מוצג: שימוש במפתחות פרטיים בהתאמה אישית

תיאור: שימוש במפתחות פרטיים מקובץ מפתחות JSON לפעולות קריפטוגרפיות.

Configuration: רשימה של מזהי מפתחות מותרים. המזהים צריכים להתאים למפתחות בקובץ מפתח ה-JSON שמשתנה הסביבה SGTM_CREDENTIALS מפנה אליו בשרת.

חובה על פי: hmacSha256

חתימה של שאילתה: queryPermission('use_custom_private_keys', <key id>)

הערות: קובעת את רשימת המפתחות הפרטיים המותרים.

קוד לדוגמה

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

שם לתצוגה: שימוש ב-Application Default Credentials של Google

תיאור: שימוש בפרטי הכניסה שמוגדרים כברירת מחדל ב-Google כדי לשלוח קריאות ל-Google APIs.

הגדרה: רשימה של היקפי הרשאות OAuth 2.0 של Google שמותר להשתמש בהם.

חובה על פי: getGoogleAuth

חתימה של שאילתה: queryPermission('use_google_credentials', <scopes>)

הערות: הגבלת היקפי ההרשאות של OAuth 2.0 של Google לשימוש ב-Google APIs.

קוד לדוגמה

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);
}