Questo documento descrive le autorizzazioni per i modelli personalizzati lato server.
Ogni autorizzazione è:
- Controllato dalle API che lo richiedono.
- Rilevato automaticamente in JavaScript con sandbox, in base alle API utilizzate. Ciò avviene quando vengono apportate modifiche nell'editor dei modelli personalizzati (per un Feedback Loop rapido) e quando il codice viene compilato (per verificare che vengano applicate le autorizzazioni corrette).
- Modificabile nell'editor di modelli personalizzati per rendere l'autorizzazione più specifica.
- È possibile eseguire query in JavaScript in modalità sandbox tramite l'API
queryPermission.
access_bigquery
Nome visualizzato: Accesses BigQuery
Descrizione: consente l'accesso a BigQuery su Google Cloud.
Configurazione: opzione per consentire l'utilizzo di combinazioni di progetti, set di dati e tabelle specifici con BigQuery. Se imposti una configurazione dell'ID progetto di GOOGLE_CLOUD_PROJECT, potrai utilizzare la variabile di ambiente GOOGLE_CLOUD_PROJECT come ID progetto quando projectId viene escluso da BigQuery API
parameter.
Richiesto da: BigQuery
Firma della query:
queryPermission('access_bigquery', <operation>, <options>)
Note: <operation> è una stringa e può avere i seguenti valori:
- scrittura
<options> è un oggetto contenente i seguenti elementi:
{
'projectId': <project_id>,
'datasetId': <dataset_id>,
'tableId': <table_id>
}
Codice di esempio
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
Nome visualizzato: Accede a Google Firestore
Descrizione: consente l'accesso a Google Firestore.
Configurazione: opzione per consentire l'utilizzo di combinazioni di progetti e percorsi specificati (sintassi con caratteri jolly supportata) con Firestore. Se imposti una configurazione dell'ID progetto di GOOGLE_CLOUD_PROJECT, potrai utilizzare la variabile di ambiente GOOGLE_CLOUD_PROJECT come ID progetto quando projectId viene escluso da Firestore API parameter.
Richiesto da: Firestore
Firma della query:
queryPermission('access_firestore', <operation>, <options>)
Note: <operation> è una stringa e può avere i seguenti valori:
- read: concede l'accesso alle API di lettura e query
- write: concede l'accesso all'API di scrittura
- read_write: concede l'accesso alle API di lettura, scrittura e query
<options> è un oggetto contenente i seguenti elementi:
{
'projectId': <project_id>,
'path': <path>
}
Codice di esempio
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
Nome visualizzato: Accede alla risposta
Descrizione: accede al corpo, alle intestazioni o allo stato della risposta.
Configurazione: opzione per consentire l'accesso generico o specifico, con opzioni secondarie per controllare l'accesso a vari componenti secondari.
Richiesto da: setPixelResponse, setResponseBody,
setResponseHeader, setResponseStatus
Firma della query:
queryPermission('access_response', 'write', <component>[, <optional component name>])
Note: determina se è possibile accedere al componente della risposta HTTP in uscita.
Codice di esempio
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
Nome visualizzato: Accede allo spazio di archiviazione del modello
Descrizione: consente l'accesso allo spazio di archiviazione temporaneo per i modelli che possono persistere per tutta la durata del processo lato server.
Configurazione: nessuna
Richiesto da: templateDataStorage
Firma della query: queryPermission('access_template_storage')
Codice di esempio
const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
const value = templateDataStorage.getItemCopy(key);
}
get_cookies
Nome visualizzato: Legge i valori dei cookie
Descrizione: legge i valori dei cookie con il nome specificato.
Configurazione: elenco di nomi di cookie consentiti per la lettura.
Richiesto da: getCookieValues
Firma della query: queryPermission('get_cookies', <name>)
Note: determina se un cookie può essere letto, a seconda del nome.
Codice di esempio
const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
cookieValues = getCookieValues(cookieName);
}
logging
Nome visualizzato: Registra i dati nella console
Descrizione: accede alla console per sviluppatori e attiva la modalità di anteprima di Tag Manager.
Configurazione: opzione per attivare il logging in produzione. Per impostazione predefinita, il logging viene attivato solo in modalità di debug/anteprima. Se l'autorizzazione viene negata, logToConsole non genererà un errore, ma sopprimerà il messaggio di log.
Richiesto da: logToConsole
Firma della query: queryPermission('logging')
Note: controlla se un modello personalizzato può accedere alla Console per sviluppatori.
Codice di esempio
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
Nome visualizzato: Utilizza i messaggi
Descrizione: invia o riceve messaggi utilizzando le API addMessageListener o sendMessage.
Configurazione: opzione per specificare il tipo di messaggio e se il modello può ascoltare, inviare o entrambi.
Richiesto da: addMessageListener, sendMessage
Firma della query: queryPermission('use_message', <usage>, <message type>)
Note: l'utilizzo può essere listen, send o listen_and_send.
Codice di esempio
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
Nome visualizzato: Legge i dati dei contenitori
Descrizione: legge i dati relativi al contenitore.
Configurazione: nessuna.
Richiesto da: getClientName, getContainerVersion
Firma della query: queryPermission('read_container_data')
Note: controlla se un modello personalizzato può leggere i dati del contenitore.
Codice di esempio
const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
return getContainerVersion();
}
read_event_data
Nome visualizzato: Legge i dati degli eventi
Descrizione: legge i dati dall'evento.
Configurazione: opzione per consentire qualsiasi accesso o un accesso specifico controllato da un elenco di percorsi delle chiavi consentiti (sintassi con caratteri jolly supportata).
Richiesto da: getAllEventData, getEventData
Firma della query: queryPermission('read_event_data'[, <optional key>])
Note: controlla se un modello personalizzato può leggere i dati sugli eventi in un determinato percorso della chiave (o tutti i dati sugli eventi, se non viene fornito alcun percorso della chiave).
Codice di esempio
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
Nome visualizzato: Legge i metadati degli eventi
Descrizione: legge i metadati degli eventi nei callback eventi
Configurazione: nessuna
Richiesto da: addEventCallback
Firma della query: queryPermission('read_event_metadata')
Note: controlla se un modello personalizzato può leggere i metadati degli eventi nei callback.
Codice di esempio
const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
addEventCallback((containerId, eventMetadata) => {
// Read event metadata.
});
}
read_request
Nome visualizzato: Legge la richiesta HTTP
Descrizione: legge le intestazioni delle richieste, i parametri di query, il corpo, il percorso o l'indirizzo IP remoto.
Configurazione: opzione per consentire l'accesso generico o specifico, con opzioni secondarie per controllare l'accesso a vari componenti secondari.
Richiesto da: extractEventsFromMpv1, extractEventsFromMpv2,
getRemoteAddress, getRequestBody, getRequestHeader,
getRequestPath, getRequestQueryParameter, getRequestQueryParameters,
getRequestQueryString
Firma della query:
queryPermission('read_request', <component>[, <optional component name>])
Note: determina se è possibile accedere al componente della risposta HTTP in entrata.
Codice di esempio
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
Nome visualizzato: Restituisce la risposta
Descrizione: restituisce la risposta al chiamante.
Configurazione: nessuna
Richiesto da: returnResponse
Firma della query: queryPermission('return_response')
Note: questa autorizzazione non ha campi da restringere e in genere non viene eseguita una query per questa autorizzazione.
run_container
Nome visualizzato: Esegue il container
Descrizione: esegue il container con un evento
Configurazione: nessuna
Richiesto da: runContainer
Firma della query: queryPermission('run_container')
Note: questa autorizzazione non ha campi da restringere e in genere non viene eseguita una query per questa autorizzazione.
send_http
Nome visualizzato: Invia richieste HTTP
Descrizione: invia una richiesta HTTP a un URL specificato.
Richiesto da: getGoogleScript, sendEventToGoogleAnalytics,
sendHttpGet, sendHttpRequest
Firma della query: queryPermission('send_http', <url>)
Note: determina se è possibile effettuare una richiesta HTTP, a seconda dell'URL. Per garantire una connessione sicura, sono consentiti solo URL sicuri (HTTPS).
Codice di esempio
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
Nome visualizzato: Invia pixel dai browser
Descrizione: invia dal browser una richiesta GET a un URL specifico.
Richiesto da: sendPixelFromBrowser
Firma della query: queryPermission('send_pixel_from_browser', <url>)
Note: determina se una richiesta può essere inviata dal browser, a seconda dell'URL.
Codice di esempio
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
Nome visualizzato: Imposta un cookie
Descrizione: imposta un cookie con il nome e i parametri specificati.
Configurazione: una tabella di nomi di cookie consentiti, ciascuno con limitazioni facoltative su nome, dominio, percorso, attributo secure e scadenza.
Richiesto da: setCookie
Firma della query: queryPermission('set_cookies', <name>, <options>)
Note: determina se un'intestazione "Set-Cookie" specifica può essere aggiunta alla risposta, a seconda del nome, del dominio, del percorso, dell'attributo secure e della scadenza del cookie.
Codice di esempio
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
Nome visualizzato: Utilizza chiavi private personalizzate
Descrizione: utilizza le chiavi private contenute in un file di chiavi JSON per le operazioni crittografiche.
Configurazione: un elenco di ID chiave consentiti. Gli ID devono corrispondere alle chiavi nel file di chiavi JSON a cui fa riferimento la variabile di ambiente SGTM_CREDENTIALS sul server.
Richiesto da: hmacSha256
Firma della query: queryPermission('use_custom_private_keys', <key id>)
Note: regola l'elenco delle chiavi private consentite.
Codice di esempio
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
Nome visualizzato: Usa le Credenziali predefinite dell'applicazione Google
Descrizione: utilizza le credenziali predefinite di Google per chiamare le API di Google.
Configurazione: un elenco di ambiti Google OAuth 2.0 consentiti.
Richiesto da: getGoogleAuth
Firma della query: queryPermission('use_google_credentials', <scopes>)
Note: limita gli ambiti Google OAuth 2.0 consentiti per l'utilizzo con le API di Google.
Codice di esempio
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
Nome visualizzato: Legge l'indirizzo IP dell'utente
Descrizione: legge l'indirizzo IP dell'utente.
Configurazione: nessuna
Richiesto da: getAnonymizedIpAddress
Firma della query: queryPermission('user_ip')
Note: controlla se un modello personalizzato può leggere l'indirizzo IP dell'utente.
Codice di esempio
const getAnonymizedIpAddress = require('getAnonymizedIpAddress');
const queryPermission = require('queryPermission');
if (queryPermission('user_ip')) {
return getAnonymizedIpAddress();
}