במסמך הזה מפורטות ההרשאות לתבניות בהתאמה אישית בצד השרת.
כל הרשאה היא:
- נבדקים על ידי ממשקי API שדורשים אותם.
- מזוהה באופן אוטומטי ב-JavaScript בארגז חול (sandbox), על סמך ממשקי ה-API שבהם נעשה שימוש. זה קורה כשמבצעים עריכות בעורך התבניות בהתאמה אישית (כדי לקבל משוב מהיר) וכשמקמפלים את הקוד (כדי לוודא שההרשאות הנכונות נאכפות).
- אפשר לערוך את ההרשאה בעורך התבניות בהתאמה אישית כדי להפוך אותה לספציפית יותר.
- ניתן לשלוח שאילתות ב-JavaScript בארגז חול באמצעות ה-API של
queryPermission.
access_bigquery
שם לתצוגה: Accesses 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
- 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')
הערות: קובע אם תבנית מותאמת אישית יכולה לתעד ביומן של Developer Console.
קוד לדוגמה
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
השם המוצג: קורא נתונים של מאגר תגים
תיאור: קריאת נתונים על מאגר התגים.
הגדרה: אין.
נדרש על ידי: 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
השם המוצג: מחזיר תשובה
תיאור: החזרת תגובה לפונקציית קריאה חוזרת (caller).
הגדרה: אין
יש לבצע עד: 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 נתונה, בהתאם לשם, לדומיין, לנתיב, למאפיין secure ולתאריך התפוגה של קובץ ה-Cookie.
קוד לדוגמה
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
שם לתצוגה: שימוש ב-Application Default Credentials של Google
תיאור: שימוש בפרטי הכניסה שמוגדרים כברירת מחדל ב-Google כדי לשלוח קריאות ל-Google APIs.
הגדרה: רשימה של היקפי הרשאות מותרים של Google OAuth 2.0.
יש לבצע עד: getGoogleAuth
חתימת השאילתה: queryPermission('use_google_credentials', <scopes>)
הערות: מגבילה את היקפי ההרשאות המותרים של Google OAuth 2.0 לשימוש עם 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);
}
user_ip
שם לתצוגה: קורא את כתובת ה-IP של המשתמש
תיאור: קורא את כתובת ה-IP של המשתמש.
הגדרה: אין
יש לבצע עד: getAnonymizedIpAddress
חתימת השאילתה: queryPermission('user_ip')
הערות: קובע אם תבנית מותאמת אישית יכולה לקרוא את כתובת ה-IP של המשתמש.
קוד לדוגמה
const getAnonymizedIpAddress = require('getAnonymizedIpAddress');
const queryPermission = require('queryPermission');
if (queryPermission('user_ip')) {
return getAnonymizedIpAddress();
}