เอกสารนี้ระบุสิทธิ์สำหรับเทมเพลตที่กำหนดเองฝั่งเซิร์ฟเวอร์
สิทธิ์แต่ละรายการคือ
- ตรวจสอบโดย API ที่จำเป็นต้องใช้
- ตรวจหาใน JavaScript แซนด์บ็อกซ์โดยอัตโนมัติตาม API ที่ใช้ กรณีนี้เกิดขึ้นเมื่อมีการแก้ไขในเครื่องมือแก้ไขเทมเพลตที่กําหนดเอง (สําหรับลูปความคิดเห็นที่รวดเร็ว) และเมื่อมีการคอมไพล์โค้ด (เพื่อตรวจสอบว่ามีการบังคับใช้สิทธิ์ที่ถูกต้อง)
- แก้ไขได้ในเครื่องมือแก้ไขเทมเพลตที่กำหนดเอง เพื่อทำให้สิทธิ์มีความเฉพาะเจาะจงมากขึ้น
- ค้นหาใน JavaScript แบบแซนด์บ็อกซ์ผ่าน
queryPermission
API ได้
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
ชื่อที่แสดง: เข้าถึงพื้นที่เก็บข้อมูลเทมเพลต
คำอธิบาย: อนุญาตการเข้าถึงพื้นที่เก็บข้อมูลชั่วคราวสำหรับเทมเพลตที่ใช้ได้ตลอดอายุของกระบวนการฝั่งเซิร์ฟเวอร์
การกำหนดค่า: ไม่มี
ต้องระบุโดย: 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
ชื่อที่แสดง: อ่านค่าคุกกี้
คำอธิบาย: อ่านค่าของคุกกี้ด้วยชื่อที่ระบุ
การกำหนดค่า: รายการชื่อคุกกี้ที่อนุญาตสำหรับการอ่าน
ต้องระบุโดย: getCookieValues
ลายเซ็นของข้อความค้นหา: queryPermission('get_cookies', <name>)
หมายเหตุ: ควบคุมว่าจะอ่านคุกกี้ได้หรือไม่ โดยขึ้นอยู่กับชื่อคุกกี้
ตัวอย่างโค้ด
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')
หมายเหตุ: ควบคุมว่าเทมเพลตที่กำหนดเองจะบันทึกไปยัง 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
การกำหนดค่า: ตัวเลือกในการระบุประเภทข้อความและกำหนดว่าเทมเพลตจะฟัง ส่ง หรือทั้ง 2 อย่างก็ได้
ต้องระบุโดย 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
ชื่อที่แสดง: อ่านข้อมูลเมตาของเหตุการณ์
คำอธิบาย: อ่านข้อมูลเมตาของเหตุการณ์ในโค้ดเรียกกลับของเหตุการณ์
การกำหนดค่า: ไม่มี
ต้องระบุโดย: 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
ลายเซ็นของคำค้นหา:
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
ชื่อที่แสดง: ตั้งค่าคุกกี้
คำอธิบาย: ตั้งค่าคุกกี้ด้วยชื่อและพารามิเตอร์ที่ระบุ
การกำหนดค่า: ตารางชื่อคุกกี้ที่อนุญาต แต่ละตารางมีข้อจำกัดที่ไม่บังคับเกี่ยวกับชื่อ โดเมน เส้นทาง แอตทริบิวต์ secure
และวันหมดอายุ
ต้องระบุโดย: setCookie
ลายเซ็นของข้อความค้นหา: queryPermission('set_cookies', <name>, <options>)
หมายเหตุ: ควบคุมว่าจะเพิ่มส่วนหัว "Set-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
คำอธิบาย: ใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของ Google ในการเรียก Google API
การกำหนดค่า: รายการขอบเขต Google OAuth 2.0 ที่อนุญาต
ต้องระบุโดย: 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);
}