W tym dokumencie opisujemy uprawnienia szablonów niestandardowych po stronie serwera.
Każde uprawnienie:
- Sprawdzone przez interfejsy API, które ich wymagają.
- Automatycznie wykrywany w JavaScripcie w trybie piaskownicy na podstawie używanych interfejsów API. Dzieje się tak, gdy wprowadzasz zmiany w edytorze niestandardowego szablonu (aby szybko uzyskać informacje zwrotne) i gdy kompilujesz kod (aby sprawdzić, czy są stosowane odpowiednie uprawnienia).
- Możesz je edytować w edytorze szablonów niestandardowych, aby dostosować uprawnienie.
- Można wysyłać zapytania w JavaScripcie w trybie piaskownicy za pomocą interfejsu API
queryPermission
.
access_bigquery
Wyświetlana nazwa: uzyskuje dostęp do BigQuery
Opis: umożliwia dostęp do BigQuery w Google Cloud Platform.
Konfiguracja: opcja zezwolenia na określony projekt, zbiór danych i tabelę
kombinacje do użycia w BigQuery. Ustawienie konfiguracji identyfikatora projektu na GOOGLE_CLOUD_PROJECT
umożliwi używanie zmiennej środowiskowej GOOGLE_CLOUD_PROJECT
jako identyfikatora projektu, gdy projectId
jest wykluczone z BigQuery API
parameter
.
Wymagany przez: BigQuery
Podpis zapytania:
queryPermission('access_bigquery', <operation>, <options>)
Uwagi: <operation>
jest ciągiem znaków i może mieć te wartości:
- zapis
<options>
to obiekt zawierający następujące elementy:
{
'projectId': <project_id>,
'datasetId': <dataset_id>,
'tableId': <table_id>
}
Przykładowy 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
Wyświetlana nazwa: uzyskuje dostęp do Google Firestore
Opis: umożliwia dostęp do Google Firestore.
Konfiguracja: opcja zezwolenia na określony projekt i ścieżkę (składnia symboli wieloznacznych)
obsługiwanych kombinacji). Ustawianie identyfikatora projektu
GOOGLE_CLOUD_PROJECT
umożliwi korzystanie z
Zmienna środowiskowa GOOGLE_CLOUD_PROJECT
jako identyfikator projektu, gdy projectId
jest wykluczony z Firestore API parameter
.
Wymagany przez: Firestore
Podpis zapytania:
queryPermission('access_firestore', <operation>, <options>)
Uwagi: <operation>
to ciąg znaków, który może mieć te wartości:
- odczyt – przyznaje uprawnienia do odczytu interfejsów API i wykonywania zapytań
- write – przyznaje uprawnienia do zapisu w interfejsie API
- read_write – przyznaje uprawnienia do odczytu, zapisu i zapytań;
<options>
to obiekt zawierający następujące elementy:
{
'projectId': <project_id>,
'path': <path>
}
Przykładowy 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
Wyświetlana nazwa: uzyskuje dostęp do odpowiedzi.
Opis: uzyskuje dostęp do treści, nagłówków lub stanu odpowiedzi.
Konfiguracja: opcja umożliwiająca przyznanie dowolnego lub konkretnego dostępu, z opcjami podrzędnymi dla: kontrolowania dostępu do różnych podkomponentów.
Wymagane przez: setPixelResponse
, setResponseBody
,
setResponseHeader
, setResponseStatus
Podpis zapytania:
queryPermission('access_response', 'write', <component>[, <optional component name>])
Uwagi: określa, czy można uzyskać dostęp do wychodzącego komponentu odpowiedzi HTTP.
Przykładowy 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
Wyświetlana nazwa: uzyskuje dostęp do pamięci szablonów
Opis: umożliwia dostęp do tymczasowego miejsca na dane szablonów, których można używać pozostają aktywne przez cały czas trwania procesu po stronie serwera.
Konfiguracja: brak
Wymagany przez: templateDataStorage
Podpis zapytania: queryPermission('access_template_storage')
Przykładowy 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
Wyświetlana nazwa: odczytuje wartości plików cookie
Opis: odczytuje wartości plików cookie o określonej nazwie.
Konfiguracja: lista nazw plików cookie, które mogą być odczytywane.
Wymagany przez: getCookieValues
Podpis zapytania: queryPermission('get_cookies', <name>)
Uwagi: określa, czy plik cookie może być odczytywany – w zależności od jego nazwy.
Przykładowy kod
const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
cookieValues = getCookieValues(cookieName);
}
logowanie
Wyświetlana nazwa: Logi do konsoli
Opis: umożliwia logowanie do konsoli programisty i trybu podglądu Menedżera tagów.
Konfiguracja:opcja umożliwiająca włączenie logowania w środowisku produkcyjnym. Wartość domyślna to tylko
włącz logowanie w trybie debugowania/podglądu. Jeśli nie przyznasz uprawnień, logToConsole
nie spowoduje zgłoszenia błędu, ale usunie komunikat dziennika.
Wymagany przez: logToConsole
Podpis zapytania: queryPermission('logging')
Uwagi: określa, czy szablon niestandardowy może logować się w konsoli programisty.
Przykładowy 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
Wyświetlana nazwa: korzysta z wiadomości.
Opis: wysyła lub odbiera wiadomości za pomocą przycisków addMessageListener
lub
Interfejsy API: sendMessage
.
Konfiguracja: opcja określenia typu wiadomości i określenia, czy szablon może tylko słuchać, tylko wysyłać czy robić jedno i drugie.
Wymagane przez: addMessageListener
, sendMessage
Podpis zapytania: queryPermission('use_message', <usage>, <message type>)
Uwaga: wykorzystanie może mieć wartość listen
, send
lub listen_and_send
.
Przykładowy 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
Wyświetlana nazwa: odczytuje dane kontenera.
Opis: odczytuje dane o kontenerze.
Konfiguracja: Brak.
Wymagane przez: getClientName
, getContainerVersion
Podpis zapytania: queryPermission('read_container_data')
Uwagi: określa, czy szablon niestandardowy może odczytywać dane kontenera.
Przykładowy kod
const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
return getContainerVersion();
}
read_event_data
Wyświetlana nazwa: odczytuje dane zdarzenia.
Opis: odczytuje dane ze zdarzenia.
Konfiguracja: opcja umożliwiająca zezwolenie na dowolny dostęp lub określony dostęp kontrolowany przez lista dozwolonych ścieżek kluczy (obsługiwana składnia symboli wieloznacznych).
Wymagane przez: getAllEventData
, getEventData
Podpis zapytania: queryPermission('read_event_data'[, <optional key>])
Uwagi: określa, czy szablon niestandardowy może odczytywać dane zdarzenia w przypadku danego klucza ścieżki (lub wszystkich danych zdarzenia, jeśli nie podano ścieżki klucza).
Przykładowy 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
Wyświetlana nazwa: odczytuje metadane zdarzenia.
Opis: odczytuje metadanych zdarzenia w wywołaniach zwrotnych zdarzenia
Konfiguracja: brak.
Wymagany przez: addEventCallback
Podpis zapytania: queryPermission('read_event_metadata')
Uwagi: określa, czy szablon niestandardowy może odczytywać metadane zdarzeń w .
Przykładowy kod
const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
addEventCallback((containerId, eventMetadata) => {
// Read event metadata.
});
}
read_request
Nazwa wyświetlana: odczytuje żądanie HTTP.
Opis: odczytuje nagłówki żądania, parametry zapytania, treść, ścieżkę lub zdalnego adresu IP.
Konfiguracja: opcja umożliwiająca przyznanie dowolnego lub konkretnego dostępu, z opcjami podrzędnymi dla: kontrolowania dostępu do różnych podkomponentów.
Wymagane przez: extractEventsFromMpv1
, extractEventsFromMpv2
,
getRemoteAddress
, getRequestBody
, getRequestHeader
,
getRequestPath
, getRequestQueryParameter
, getRequestQueryParameters
,
getRequestQueryString
Podpis zapytania:
queryPermission('read_request', <component>[, <optional component name>])
Uwagi: określa, czy można uzyskać dostęp do przychodzącego komponentu odpowiedzi HTTP.
Przykładowy 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
Wyświetlana nazwa: zwraca odpowiedź.
Opis: zwraca odpowiedź rozmówcy.
Konfiguracja: brak
Wymagany przez: returnResponse
Podpis zapytania: queryPermission('return_response')
Uwagi: to uprawnienie nie zawiera pól, które można zawęzić, i zwykle nie jest objęte zapytaniem .
run_container
Wyświetlana nazwa: uruchamia kontener.
Opis: uruchamia kontener ze zdarzeniem.
Konfiguracja: brak.
Wymagane przez: runContainer
Podpis zapytania: queryPermission('run_container')
Uwagi: to uprawnienie nie zawiera pól, które można zawęzić, i zwykle nie jest objęte zapytaniem .
send_http
Wyświetlana nazwa: wysyła żądania HTTP.
Opis: wysyła żądanie HTTP do określonego adresu URL.
Wymagane przez: getGoogleScript
, sendEventToGoogleAnalytics
,
sendHttpGet
, sendHttpRequest
Podpis zapytania: queryPermission('send_http', <url>)
Uwagi: określa, czy można wysłać żądanie HTTP w zależności od adresu URL. Aby zapewnić bezpieczne połączenie, dozwolone są tylko adresy URL zabezpieczone (HTTPS).
Przykładowy 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
Wyświetlana nazwa: wysyła piksele z przeglądarek.
Opis: wysyła z przeglądarki żądanie GET do określonego adresu URL.
Wymagany przez: sendPixelFromBrowser
Podpis zapytania: queryPermission('send_pixel_from_browser', <url>)
Uwagi: określa, czy żądania mogą być wysyłane z przeglądarki w zależności od adres URL.
Przykładowy 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
Wyświetlana nazwa: ustawia plik cookie.
Opis: ustawia plik cookie o określonej nazwie i określonych parametrach.
Konfiguracja: tabela z dozwolonymi nazwami plików cookie, przy każdej z opcjonalnych nazw
ograniczenia dotyczące nazwy, domeny, ścieżki, atrybutu secure
i okresu ważności.
Wymagane przez: setCookie
Podpis zapytania: queryPermission('set_cookies', <name>, <options>)
Uwagi: określa, czy dany parametr „Set-Cookie” nagłówek do sekcji
w zależności od nazwy pliku cookie, domeny, ścieżki, atrybutu secure
oraz
utraty ważności.
Przykładowy 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
Wyświetlana nazwa: używa niestandardowych kluczy prywatnych.
Opis: użycie kluczy prywatnych z pliku kluczy JSON do celów kryptograficznych operacji.
Konfiguracja: lista dozwolonych identyfikatorów kluczy. Identyfikatory muszą być zgodne z kluczami w
plik klucza JSON, do którego odwołuje się zmienna środowiskowa SGTM_CREDENTIALS
na serwerze.
Wymagany przez: hmacSha256
Podpis zapytania: queryPermission('use_custom_private_keys', <key id>)
Uwagi: zarządza listą dozwolonych kluczy prywatnych.
Przykładowy 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
Wyświetlana nazwa: używa domyślnych danych logowania aplikacji Google
Opis: używanie domyślnych danych logowania Google do nawiązywania połączeń z Google. API.
Konfiguracja: lista dozwolonych zakresów protokołu Google OAuth 2.0.
Wymagany przez: getGoogleAuth
Podpis zapytania: queryPermission('use_google_credentials', <scopes>)
Uwagi: ogranicza zakresy dozwolonych w Google OAuth 2.0 do użytku w Google API.
Przykładowy 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);
}