Dokumen ini berisi penjelasan tentang izin untuk template kustom sisi server.
Setiap izin:
- Diperiksa oleh API yang mewajibkannya.
- Terdeteksi secara otomatis dalam JavaScript dengan sandbox, berdasarkan API yang digunakan. Hal ini terjadi saat pengeditan dilakukan di editor template kustom (untuk feedback loop yang cepat), dan saat kode dikompilasi (untuk memvalidasi bahwa izin yang benar telah diterapkan).
- Dapat diedit di editor template kustom, untuk menjadikan izin lebih spesifik.
- Dapat dikueri dalam JavaScript dengan sandbox melalui API
queryPermission
.
access_bigquery
Nama tampilan: Mengakses BigQuery
Deskripsi: Mengizinkan akses ke BigQuery di Google Cloud Platform.
Konfigurasi: Opsi untuk mengizinkan kombinasi project, set data, dan tabel yang ditentukan untuk digunakan dengan BigQuery. Penetapan konfigurasi project ID GOOGLE_CLOUD_PROJECT
akan mengizinkan penggunaan variabel lingkungan GOOGLE_CLOUD_PROJECT
sebagai project ID saat projectId
dikecualikan dari BigQuery API
parameter
.
Diwajibkan oleh: BigQuery
Signature kueri:
queryPermission('access_bigquery', <operation>, <options>)
Catatan: <operation>
adalah string dan dapat memiliki nilai berikut:
- write
<options>
adalah objek yang berisi item berikut:
{
'projectId': <project_id>,
'datasetId': <dataset_id>,
'tableId': <table_id>
}
Kode contoh
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
Nama tampilan: Mengakses Google Firestore
Deskripsi: Mengizinkan akses ke Google Firestore.
Konfigurasi: Opsi untuk mengizinkan kombinasi project dan jalur yang ditentukan (sintaksis karakter pengganti didukung) untuk digunakan dengan Firestore. Penetapan konfigurasi project ID GOOGLE_CLOUD_PROJECT
akan mengizinkan penggunaan variabel lingkungan GOOGLE_CLOUD_PROJECT
sebagai project ID saat projectId
dikecualikan dari Firestore API parameter
.
Diwajibkan oleh: Firestore
Signature kueri:
queryPermission('access_firestore', <operation>, <options>)
Catatan: <operation>
adalah string dan dapat memiliki nilai berikut:
- read - Memberikan akses untuk membaca dan meng-kueri API
- write - Memberikan akses untuk menulis API
- read_write - Memberikan akses untuk membaca, menulis, dan meng-kueri API
<options>
adalah objek yang berisi item berikut:
{
'projectId': <project_id>,
'path': <path>
}
Kode contoh
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
Nama tampilan: Mengakses respons
Deskripsi: Mengakses isi, header, atau status respons.
Konfigurasi: Opsi untuk mengizinkan akses apa pun atau akses tertentu, dengan sub-opsi untuk mengontrol akses ke berbagai subkomponen.
Diwajibkan oleh: setPixelResponse
, setResponseBody
,
setResponseHeader
, setResponseStatus
Signature kueri:
queryPermission('access_response', 'write', <component>[, <optional component name>])
Catatan: Mengatur apakah komponen respons HTTP keluar dapat diakses.
Kode contoh
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
Nama tampilan: Mengakses Penyimpanan Template
Deskripsi: Mengizinkan akses ke penyimpanan sementara untuk template yang dapat dipertahankan di sepanjang waktu proses sisi server.
Konfigurasi: Tidak ada
Diwajibkan oleh: templateDataStorage
Signature kueri: queryPermission('access_template_storage')
Kode contoh
const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
const value = templateDataStorage.getItemCopy(key);
}
get_cookies
Nama tampilan: Membaca nilai cookie
Deskripsi: Membaca nilai cookie dengan nama yang ditentukan.
Konfigurasi: Daftar nama cookie yang diizinkan untuk dibaca.
Diwajibkan oleh: getCookieValues
Signature kueri: queryPermission('get_cookies', <name>)
Catatan: Mengatur apakah cookie dapat dibaca, bergantung pada namanya.
Kode contoh
const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
cookieValues = getCookieValues(cookieName);
}
logging
Nama tampilan: Logging untuk konsol
Deskripsi: Logging untuk konsol developer and dan mode pratinjau Tag Manager.
Konfigurasi: Opsi untuk mengaktifkan logging dalam produksi. Setelan defaultnya hanya mengaktifkan logging di debug/pratinjau. Jika izin ditolak, logToConsole
tidak
akan menampilkan error, tetapi akan menyembunyikan pesan log.
Diwajibkan oleh: logToConsole
Signature kueri: queryPermission('logging')
Catatan: Mengontrol apakah template kustom dapat melakukan logging ke konsol developer.
Kode contoh
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
Nama tampilan: Menggunakan pesan
Deskripsi: Mengirim atau menerima pesan menggunakan API addMessageListener
atau
sendMessage
.
Konfigurasi: Opsi untuk menentukan jenis pesan dan apakah template dapat memproses, mengirim, atau melakukan keduanya.
Diwajibkan oleh: addMessageListener
, sendMessage
Signature kueri: queryPermission('use_message', <usage>, <message type>)
Catatan: Penggunaan dapat berupa salah satu dari listen
, send
, atau listen_and_send
.
Kode contoh
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
Nama tampilan: Membaca data penampung
Deskripsi: Membaca data tentang penampung.
Konfigurasi: Tidak ada.
Diwajibkan oleh: getClientName
, getContainerVersion
Signature kueri: queryPermission('read_container_data')
Catatan: Mengontrol apakah template kustom dapat membaca data penampung.
Kode contoh
const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
return getContainerVersion();
}
read_event_data
Nama tampilan: Membaca data peristiwa
Deskripsi: Membaca data dari peristiwa.
Konfigurasi: Opsi untuk mengizinkan akses apa pun, atau akses tertentu yang dikontrol oleh daftar jalur kunci yang diizinkan (sintaksis karakter pengganti didukung).
Diwajibkan oleh: getAllEventData
, getEventData
Signature kueri: queryPermission('read_event_data'[, <optional key>])
Catatan: Mengontrol apakah template kustom dapat membaca data peristiwa di jalur kunci tertentu (atau semua data peristiwa, jika tidak ada jalur kunci yang diberikan).
Kode contoh
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
Nama tampilan: Membaca metadata peristiwa
Deskripsi: Membaca metadata peristiwa di Callback Peristiwa
Konfigurasi: Tidak ada
Diwajibkan oleh: addEventCallback
Signature kueri: queryPermission('read_event_metadata')
Catatan: Mengontrol apakah template kustom dapat membaca metadata peristiwa di callback.
Kode contoh
const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
addEventCallback((containerId, eventMetadata) => {
// Read event metadata.
});
}
read_request
Nama tampilan: Membaca permintaan HTTP
Deskripsi: Membaca header permintaan, parameter kueri, isi, jalur, atau alamat IP jarak jauh.
Konfigurasi: Opsi untuk mengizinkan akses apa pun atau akses tertentu, dengan sub-opsi untuk mengontrol akses ke berbagai subkomponen.
Diwajibkan oleh: extractEventsFromMpv1
, extractEventsFromMpv2
,
getRemoteAddress
, getRequestBody
, getRequestHeader
,
getRequestPath
, getRequestQueryParameter
, getRequestQueryParameters
,
getRequestQueryString
Signature kueri:
queryPermission('read_request', <component>[, <optional component name>])
Catatan: Mengatur apakah komponen respons HTTP yang masuk dapat diakses.
Kode contoh
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
Nama tampilan: Menampilkan respons
Deskripsi: Menampilkan respons kepada pemanggil.
Konfigurasi: Tidak ada
Diwajibkan oleh: returnResponse
Signature kueri: queryPermission('return_response')
Catatan: Izin ini tidak memiliki kolom untuk dipersempit, dan biasanya tidak dikueri.
run_container
Nama tampilan: Menjalankan penampung
Deskripsi: Menjalankan penampung dengan peristiwa
Konfigurasi: Tidak ada
Diwajibkan oleh: runContainer
Signature kueri: queryPermission('run_container')
Catatan: Izin ini tidak memiliki kolom untuk dipersempit, dan biasanya tidak dikueri.
send_http
Nama tampilan: Mengirim permintaan HTTP
Deskripsi: Mengirim permintaan HTTP ke URL tertentu.
Diwajibkan oleh: getGoogleScript
, sendEventToGoogleAnalytics
,
sendHttpGet
, sendHttpRequest
Signature kueri: queryPermission('send_http', <url>)
Catatan: Mengatur apakah permintaan HTTP dapat dibuat, bergantung pada URL. Untuk memastikan koneksi aman, hanya URL (HTTPS) aman yang diizinkan.
Kode contoh
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
Nama tampilan: Mengirim piksel dari browser
Deskripsi: Mengirim permintaan GET ke URL yang ditentukan dari browser.
Diwajibkan oleh: sendPixelFromBrowser
Signature kueri: queryPermission('send_pixel_from_browser', <url>)
Catatan: Mengatur apakah permintaan dapat dikirim dari browser, bergantung pada URL.
Kode contoh
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
Nama tampilan: Menetapkan cookie
Deskripsi: Menetapkan cookie dengan nama dan parameter yang ditentukan.
Konfigurasi: Tabel nama cookie yang diizinkan, masing-masing dengan pembatasan opsional pada nama, domain, jalur, atribut secure
, dan masa berlaku.
Diwajibkan oleh: setCookie
Signature kueri: queryPermission('set_cookies', <name>, <options>)
Catatan: Mengatur apakah header 'Set-Cookie' tertentu dapat ditambahkan ke respons, bergantung pada nama cookie, domain, jalur, atribut secure
, dan masa berlaku.
Kode contoh
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
Nama tampilan: Menggunakan kunci pribadi kustom
Deskripsi: Menggunakan kunci pribadi dari file kunci JSON untuk operasi kriptografi.
Konfigurasi: Daftar ID kunci yang diizinkan. ID harus cocok dengan kunci dalam file kunci JSON yang direferensikan oleh variabel lingkungan SGTM_CREDENTIALS
di server.
Diwajibkan oleh: hmacSha256
Signature kueri: queryPermission('use_custom_private_keys', <key id>)
Catatan: Mengatur daftar kunci pribadi yang diizinkan.
Kode contoh
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
Nama tampilan: Menggunakan Kredensial Default Aplikasi Google
Deskripsi: Menggunakan kredensial default Google untuk melakukan panggilan ke Google API.
Konfigurasi: Daftar cakupan Google OAuth 2.0 yang diizinkan.
Diwajibkan oleh: getGoogleAuth
Signature kueri: queryPermission('use_google_credentials', <scopes>)
Catatan: Membatasi cakupan Google OAuth 2.0 yang diizinkan untuk digunakan dengan Google API.
Kode contoh
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);
}