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

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


כל הרשאה:

  • נבדקים על ידי ממשקי 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> היא מחרוזת, והיא יכולה לקבל את הערכים הבאים:

  • כתיבה

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

רישום ביומן

שם תצוגה: יומנים למסוף

תיאור: יומנים למסוף המפתחים ולמצב התצוגה המקדימה של 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.

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

נדרש על ידי: 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')

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

קוד לדוגמה

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 API.

קוד לדוגמה

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