Bu dokümanda, sunucu tarafı özel şablonların izinleri açıklanmaktadır.
Her izin:
- Bu izinleri gerektiren API'ler tarafından kontrol edilir.
- Kullanılan API'lere göre korumalı alana alınmış JavaScript'te otomatik olarak algılanır. Bu durum, özel şablon düzenleyicide düzenlemeler yapıldığında (hızlı bir geri bildirim döngüsü için) ve kod derlendiğinde (doğru izinlerin uygulandığını doğrulamak için) gerçekleşir.
- İzni daha spesifik hale getirmek için özel şablon düzenleyicide düzenlenebilir.
- Korumalı alandaki JavaScript'te
queryPermissionAPI'si aracılığıyla 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. Proje kimliği yapılandırmasını GOOGLE_CLOUD_PROJECT olarak ayarlarsanız projectId, BigQuery API
parameter parametresinden hariç tutulduğunda GOOGLE_CLOUD_PROJECT ortam değişkeni proje kimliği olarak kullanılabilir.
Gerekli olduğu tarih: BigQuery
Sorgu imzası:
queryPermission('access_bigquery', <operation>, <options>)
Notlar: <operation> bir dizedir ve aşağıdaki değerlere sahip olabilir:
- yardım et
<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 izni verir.
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ı ayarlandığında, projectId Firestore API parameter'dan hariç tutulursa GOOGLE_CLOUD_PROJECT ortam değişkeni proje kimliği olarak kullanılabilir.
Gerekli olduğu tarih: 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 sorgulama erişimi verir.
- write: Yazma API'sine erişim izni verir.
- read_write: Okuma, yazma ve sorgulama API'lerine 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: Herhangi bir erişime veya belirli erişimlere izin verme seçeneği. Çeşitli alt bileşenlere erişimi kontrol etmek için alt seçenekler bulunur.
Zorunlu kılanlar: 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 kullanım ömrü boyunca devam edebilen şablonlar için geçici depolama alanına erişim sağlar.
Yapılandırma: Yok
Gerekli olduğu tarih: 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 okuma
Açıklama: Belirtilen ada sahip çerezlerin değerlerini okur.
Yapılandırma: Okunmasına izin verilen çerezlerin adlarının listesi.
Gerekli olduğu tarih: getCookieValues
Sorgu imzası: queryPermission('get_cookies', <name>)
Notlar: Bir çerezin okunup okunamayacağını adına göre 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ı ekleme
Açıklama: Geliştirme konsolunda ve Etiket Yöneticisi'nin önizleme modunda verileri günlüğe kaydeder.
Yapılandırma: Üretimde günlük kaydını etkinleştirme seçeneği. Varsayılan olarak yalnızca hata ayıklama/önizleme modunda günlük kaydı etkinleştirilir. İzin reddedilirse logToConsole hata vermez ancak günlük mesajını gizler.
Gerekli olduğu tarih: logToConsole
Sorgu imzası: queryPermission('logging')
Notlar: Özel bir şablonun geliştirici konsoluna giriş 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ı kullanma
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 veya her ikisini birden yapıp yapamayacağını belirleme seçeneği.
Zorunlu kılan: 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.
Zorunlu kılan: 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ı listesi tarafından kontrol edilen belirli erişime izin verme seçeneği (joker karakter söz dizimi desteklenir).
Zorunlu kılan: getAllEventData, getEventData
Sorgu imzası: queryPermission('read_event_data'[, <optional key>])
Notlar: Özel bir şablonun, belirli bir anahtar yolundaki 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ğırmalarındaki etkinlik meta verilerini okur.
Yapılandırma: Yok
Gerekli olduğu tarih: addEventCallback
Sorgu imzası: queryPermission('read_event_metadata')
Notlar: Özel bir ş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: Herhangi bir erişime veya belirli erişimlere izin verme seçeneği. Çeşitli alt bileşenlere erişimi kontrol etmek için alt seçenekler bulunur.
Zorunlu kılanlar: 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
Gerekli olduğu tarih: returnResponse
Sorgu imzası: queryPermission('return_response')
Notlar: Bu iznin daraltılacak alanı yoktur ve genellikle sorgulanmaz.
run_container
Görünen ad: Kapsayıcıyı çalıştırma
Açıklama: Kapsayıcıyı bir etkinlikle çalıştırır
Yapılandırma: Yok
Gerekli olduğu tarih: runContainer
Sorgu imzası: queryPermission('run_container')
Notlar: Bu iznin daraltılacak alanı yoktur ve genellikle sorgulanmaz.
send_http
Görünen ad: HTTP istekleri gönderir
Açıklama: Belirtilen bir URL'ye HTTP isteği gönderir.
Zorunlu kılanlar: getGoogleScript, sendEventToGoogleAnalytics,
sendHttpGet, sendHttpRequest
Sorgu imzası: queryPermission('send_http', <url>)
Notlar: URL'ye bağlı olarak bir HTTP isteğinin yapılıp yapılamayacağını 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önderme
Açıklama: Tarayıcıdan belirli bir URL'ye GET isteği gönderir.
Gerekli olduğu tarih: 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 ada ve parametrelere sahip bir çerez oluşturur.
Yapılandırma: İzin verilen çerez adlarının yer aldığı bir tablo. Her birinin ad, alan, yol, secure özelliği ve geçerlilik bitiş tarihiyle ilgili isteğe bağlı kısıtlamaları vardır.
Gerekli olduğu tarih: setCookie
Sorgu imzası: queryPermission('set_cookies', <name>, <options>)
Notlar: Belirli bir "Set-Cookie" üstbilgisinin yanıta eklenip eklenemeyeceğini çerez adı, alan adı, yol, secure özelliği ve geçerlilik bitiş tarihine göre 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: Özelleştirilmiş ö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.
Gerekli olduğu tarih: 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.
Gerekli olduğu tarih: getGoogleAuth
Sorgu imzası: queryPermission('use_google_credentials', <scopes>)
Notlar: Google API'leriyle kullanım için 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);
}
user_ip
Görünen ad: Kullanıcının IP adresini okur
Açıklama: Kullanıcının IP adresini okur.
Yapılandırma: Yok
Gerekli olduğu tarih: getAnonymizedIpAddress
Sorgu imzası: queryPermission('user_ip')
Notlar: Özel bir şablonun kullanıcının IP adresini okuyup okuyamayacağını kontrol eder.
Örnek kod
const getAnonymizedIpAddress = require('getAnonymizedIpAddress');
const queryPermission = require('queryPermission');
if (queryPermission('user_ip')) {
return getAnonymizedIpAddress();
}