Bu dokümanda, sunucu tarafı özel şablonlarla ilgili izinler ana hatlarıyla açıklanmaktadır.
Her izin:
- Bunları gerektiren API'ler tarafından kontrol edilir.
- Kullanılan API'lere bağlı olarak korumalı alandaki JavaScript'te otomatik olarak algılanır. Bu durum, özel şablon düzenleyicide düzenlemeler yapılırken (hızlı bir geri bildirim döngüsü için) ve kod derlenirken (doğru izinlerin uygulandığını doğrulamak için) ortaya çıkar.
- İzni daha spesifik hale getirmek için özel şablon düzenleyicisinde düzenlenebilir.
queryPermission
API aracılığıyla korumalı alandaki JavaScript'de sorgulanabilir.
access_bigquery
Görünen ad: BigQuery'ye erişir
Açıklama: Google Cloud Platform'da BigQuery'ye erişim sağlar.
Yapılandırma: Belirtilen proje, veri kümesi ve tablo kombinasyonlarının BigQuery ile kullanılmasına izin verme seçeneği. GOOGLE_CLOUD_PROJECT
proje kimliği yapılandırması ayarlandığında, projectId
BigQuery API
parameter
hariç tutulduğunda proje kimliği olarak GOOGLE_CLOUD_PROJECT
ortam değişkeninin kullanılmasına izin verilir.
Zorunlu olduğu platformlar: BigQuery
Sorgu imzası:
queryPermission('access_bigquery', <operation>, <options>)
Notlar: <operation>
bir dizedir ve aşağıdaki değerlere sahip olabilir:
- write
<options>
, aşağıdaki öğeleri içeren bir nesnedir:
{
'projectId': <project_id>,
'datasetId': <dataset_id>,
'tableId': <table_id>
}
Örnek kod
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
Görünen ad: Google Firestore'a erişir
Açıklama: Google Firestore'a erişim sağlar.
Yapılandırma: Belirtilen proje ve yol (joker karakter söz dizimi desteklenir) kombinasyonlarının Firestore ile kullanılmasına izin verme seçeneği. GOOGLE_CLOUD_PROJECT
proje kimliği yapılandırması ayarlamak, projectId
Firestore API parameter
hariç tutulduğunda proje kimliği olarak GOOGLE_CLOUD_PROJECT
ortam değişkeninin kullanılmasına olanak tanır.
Zorunlu olduğu platformlar: Firestore
Sorgu imzası:
queryPermission('access_firestore', <operation>, <options>)
Notlar: <operation>
bir dizedir ve aşağıdaki değerlere sahip olabilir:
- read: API'leri okuma ve sorgulamaya erişim izni verir.
- write: API'ye yazma erişimi verir.
- read_write: API'leri okuma, yazma ve sorgulamaya erişim izni verir.
<options>
, aşağıdaki öğeleri içeren bir nesnedir:
{
'projectId': <project_id>,
'path': <path>
}
Örnek kod
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
Görünen ad: Yanıta erişme
Açıklama: Yanıt gövdesine, başlıklara veya duruma erişir.
Yapılandırma: Çeşitli alt bileşenlere erişimi kontrol etmek için alt seçenekler içeren, herhangi bir erişime veya belirli bir erişime izin verme seçeneği.
Şunlar tarafından zorunlu kılınmıştır: setPixelResponse
, setResponseBody
,
setResponseHeader
, setResponseStatus
Sorgu imzası:
queryPermission('access_response', 'write', <component>[, <optional component name>])
Notlar: Giden HTTP yanıt bileşenine erişilip erişilemeyeceğini belirler.
Örnek kod
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
Görünen ad: Şablon Depolama Alanına Erişir
Açıklama: Sunucu tarafı işleminin süresi boyunca devam edebilecek şablonlar için geçici depolamaya erişim sağlar.
Yapılandırma: Yok
Zorunlu olduğu platformlar: templateDataStorage
Sorgu imzası: queryPermission('access_template_storage')
Örnek kod
const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
const value = templateDataStorage.getItemCopy(key);
}
get_cookies
Görünen ad: Çerez değerlerini okur
Açıklama: Belirtilen ada sahip çerezlerin değerlerini okur.
Yapılandırma: Okunmasına izin verilen çerez adlarının listesi.
Zorunlu olduğu platformlar: getCookieValues
Sorgu imzası: queryPermission('get_cookies', <name>)
Notlar: Bir çerezin adına bağlı olarak okunup okunamayacağını belirler.
Örnek kod
const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
cookieValues = getCookieValues(cookieName);
}
logging
Görünen ad: Konsola günlük kaydı ekler
Açıklama: Geliştirici Konsolu'nda ve Etiket Yöneticisi'nin önizleme modunda günlük kaydı oluşturur.
Yapılandırma: Üretimde günlük kaydını etkinleştirme seçeneği. Varsayılan olarak yalnızca hata ayıklama/önizleme sırasında günlük kaydını etkinleştirir. İzin reddedilirse logToConsole
hata vermez ancak günlük mesajını bastırır.
Zorunlu olduğu platformlar: logToConsole
Sorgu imzası: queryPermission('logging')
Notlar: Özel şablonun geliştirici konsoluna günlük kaydını yapıp yapamayacağını kontrol eder.
Örnek kod
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
Görünen ad: Mesajları kullanır
Açıklama: addMessageListener
veya sendMessage
API'lerini kullanarak mesaj gönderir ya da alır.
Yapılandırma: Mesaj türünü ve şablonun dinleyip dinleyemeyeceğini, gönderip gönderemeyeceğini belirtme seçeneği.
Şu platformlar tarafından zorunludur: addMessageListener
, sendMessage
Sorgu imzası: queryPermission('use_message', <usage>, <message type>)
Notlar: Kullanım, listen
, send
veya listen_and_send
olabilir.
Örnek kod
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
Görünen ad: Kapsayıcı verilerini okur
Açıklama: Kapsayıcıyla ilgili verileri okur.
Yapılandırma: Yok.
Şu platformlar tarafından zorunludur: getClientName
, getContainerVersion
Sorgu imzası: queryPermission('read_container_data')
Notlar: Özel bir şablonun kapsayıcı verilerini okuyup okuyamayacağını kontrol eder.
Örnek kod
const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
return getContainerVersion();
}
read_event_data
Görünen ad: Etkinlik verilerini okur
Açıklama: Etkinlikten alınan verileri okur.
Yapılandırma: Herhangi bir erişime veya izin verilen anahtar yollarının listesi tarafından kontrol edilen belirli bir erişime izin verme seçeneği (yıldız işareti söz dizimi desteklenir).
Şu platformlar tarafından zorunludur: getAllEventData
, getEventData
Sorgu imzası: queryPermission('read_event_data'[, <optional key>])
Notlar: Özel şablonun belirli bir anahtar yolunda etkinlik verilerini (veya anahtar yolu belirtilmemişse tüm etkinlik verilerini) okuyup okuyamayacağını kontrol eder.
Örnek kod
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
Görünen ad: Etkinlik meta verilerini okur.
Açıklama: Etkinlik geri çağırma işlevlerindeki etkinlik meta verilerini okur
Yapılandırma: Yok
Zorunlu olduğu platformlar: addEventCallback
Sorgu imzası: queryPermission('read_event_metadata')
Notlar: Özel şablonun geri çağırmalarda etkinlik meta verilerini okuyup okuyamayacağını kontrol eder.
Örnek kod
const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
addEventCallback((containerId, eventMetadata) => {
// Read event metadata.
});
}
read_request
Görünen ad: HTTP isteğini okur
Açıklama: İstek başlıklarını, sorgu parametrelerini, gövdeyi, yolu veya uzak IP adresini okur.
Yapılandırma: Çeşitli alt bileşenlere erişimi kontrol etmek için alt seçenekler içeren, herhangi bir erişime veya belirli bir erişime izin verme seçeneği.
Şunlar tarafından zorunlu kılınmıştır: extractEventsFromMpv1
, extractEventsFromMpv2
,
getRemoteAddress
, getRequestBody
, getRequestHeader
,
getRequestPath
, getRequestQueryParameter
, getRequestQueryParameters
,
getRequestQueryString
Sorgu imzası:
queryPermission('read_request', <component>[, <optional component name>])
Notlar: Gelen HTTP yanıt bileşenine erişilip erişilemeyeceğini belirler.
Örnek kod
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
Görünen ad: Yanıtı döndürür.
Açıklama: Arayana yanıt döndürür.
Yapılandırma: Yok
Zorunlu olduğu platformlar: returnResponse
Sorgu imzası: queryPermission('return_response')
Notlar: Bu izin için daraltılacak alan yoktur ve genellikle sorgulanmamaktadır.
run_container
Görünen ad: Kapsayıcıyı çalıştırır
Açıklama: Kapsayıcıyı bir etkinlikle çalıştırır
Yapılandırma: Yok
Zorunlu olduğu platformlar: runContainer
Sorgu imzası: queryPermission('run_container')
Notlar: Bu izin için daraltılacak alan yoktur ve genellikle sorgulanmamaktadır.
send_http
Görünen ad: HTTP istekleri gönderir
Açıklama: Belirtilen bir URL'ye HTTP isteği gönderir.
Şunlar tarafından zorunlu kılınmıştır: getGoogleScript
, sendEventToGoogleAnalytics
,
sendHttpGet
, sendHttpRequest
Sorgu imzası: queryPermission('send_http', <url>)
Notlar: URL'ye bağlı olarak HTTP isteği gönderilip gönderilemeyeceğini belirler. Güvenli bir bağlantı sağlamak için yalnızca güvenli (HTTPS) URL'lere izin verilir.
Örnek kod
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
Görünen ad: Tarayıcılardan piksel gönderir
Açıklama: Tarayıcıdan belirli bir URL'ye GET isteği gönderir.
Zorunlu olduğu platformlar: sendPixelFromBrowser
Sorgu imzası: queryPermission('send_pixel_from_browser', <url>)
Notlar: URL'ye bağlı olarak, tarayıcıdan istek gönderilip gönderilemeyeceğini belirler.
Örnek kod
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
Görünen ad: Çerez ayarlama
Açıklama: Belirtilen ad ve parametrelere sahip bir çerez oluşturur.
Yapılandırma: Her biri ad, alan, yol, secure
özelliği ve geçerlilik süresiyle ilgili isteğe bağlı kısıtlamalar içeren izin verilen çerez adlarının yer aldığı bir tablo.
Zorunlu olduğu platformlar: setCookie
Sorgu imzası: queryPermission('set_cookies', <name>, <options>)
Notlar: Çerez adı, alan, yol, secure
özelliği ve geçerlilik süresine bağlı olarak belirli bir "Set-Cookie" üstbilgisinin yanıta eklenip eklenemeyeceğini belirler.
Örnek kod
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
Görünen ad: Özel özel anahtarlar kullanır
Açıklama: Şifreleme işlemleri için JSON anahtar dosyasından özel anahtarlar kullanır.
Yapılandırma: İzin verilen anahtar kimliklerinin listesi. Kimlikler, sunucudaki SGTM_CREDENTIALS
ortam değişkeni tarafından başvurulan JSON anahtar dosyasındaki anahtarlarla eşleşmelidir.
Zorunlu olduğu platformlar: hmacSha256
Sorgu imzası: queryPermission('use_custom_private_keys', <key id>)
Notlar: İzin verilen özel anahtarların listesini yönetir.
Örnek kod
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
Görünen ad: Google Uygulaması Varsayılan Kimlik Bilgilerini kullanır
Açıklama: Google API'lerine çağrı yapmak için Google varsayılan kimlik bilgilerini kullanır.
Yapılandırma: İzin verilen Google OAuth 2.0 kapsamlarının listesi.
Zorunlu olduğu platformlar: getGoogleAuth
Sorgu imzası: queryPermission('use_google_credentials', <scopes>)
Notlar: Google API'leriyle birlikte kullanılmasına izin verilen Google OAuth 2.0 kapsamlarını kısıtlar.
Örnek kod
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);
}