Sunucu tarafı özel şablon izinleri

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 queryPermission API'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();
}