במסמך הזה מפורטות ההרשאות לתבניות בהתאמה אישית בצד השרת.
כל הרשאה:
- נבדקים על ידי ממשקי 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);
}