Sunucu tarafı özel şablon izinleri

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);
}