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

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


כל הרשאה היא:

  • נבדקים על ידי ממשקי API שמחייבים אותם.
  • זיהוי אוטומטי ב-JavaScript שמופעל בארגז חול, בהתאם לממשקי ה-API שבהם נעשה שימוש. זה קורה כשעורכים בכלי לעריכת תבניות בהתאמה אישית (כדי ליצור לולאת משוב מהירה) וכשמבוצע קומפילציה של הקוד (כדי לוודא שההרשאות הנכונות נאכפות).
  • ניתן לערוך את הפרטים בעורך התבניות בהתאמה אישית כדי שההרשאה תהיה ספציפית יותר.
  • אפשר להריץ שאילתות ב-JavaScript בארגז חול (sandbox) דרך ה-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> היא מחרוזת ויכולה לכלול את הערכים הבאים:

  • קריאה - הענקת גישה לקריאה ולהרצת שאילתות על ממשקי API
  • כתיבה - הענקת גישה לכתיבה בממשק 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

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

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

הגדרה: ללא

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

Display name: קריאת הערכים של קובצי ה-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);
}

logging

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

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

הערות: השימוש יכול להיות אחד מהערכים 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

Display name: קריאה של נתוני המאגר

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

הגדרה: ללא.

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

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

תיאור: קריאת מטא-נתונים של אירועים ב-Event Callbacks

הגדרה: ללא

נדרש על ידי: addEventCallback

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

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

קוד לדוגמה

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{/28

חתימת שאילתה: 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

Display name: הפעלת מאגר התגים

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

הגדרה: ללא

נדרש על ידי: 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 לפעולות קריפטוגרפיות.

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

השם המוצג: נעשה שימוש ב-Google Application Default Credentials

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

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

נדרש על ידי: getGoogleAuth

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

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

קוד לדוגמה

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