Autorizzazioni dei modelli personalizzati lato server

Questo documento illustra le autorizzazioni per i modelli personalizzati lato server.


Ogni autorizzazione è:

  • Viene controllato dalle API che li richiedono.
  • Rilevata automaticamente in JavaScript con sandbox, in base alle API utilizzate. Questo accade man mano che le modifiche vengono apportate nell'editor dei modelli personalizzati (per una ciclo di feedback) e quando il codice viene compilato (per verificare che sia stato autorizzazioni sono applicate in modo forzato).
  • Modificabili nell'editor dei modelli personalizzati, per rendere l'autorizzazione più specifica.
  • Interrogabile in JavaScript con sandbox tramite l'API queryPermission.

access_bigquery

Nome visualizzato: consente di accedere a BigQuery

Descrizione: consente l'accesso a BigQuery su Google Cloud Platform.

Configurazione:opzione per consentire il progetto, il set di dati e la tabella specificati combinazioni da usare con BigQuery. L'impostazione di un ID progetto di configurazione GOOGLE_CLOUD_PROJECT consentirà di utilizzare l'ambiente GOOGLE_CLOUD_PROJECT come ID progetto quando projectId viene escluso da BigQuery API parameter.

Richiesta da: BigQuery

Firma della query: queryPermission('access_bigquery', <operation>, <options>)

Note: <operation> è una stringa e può avere i seguenti valori:

  • write

<options> è un oggetto che contiene i seguenti elementi:

{
  'projectId': <project_id>,
  'datasetId': <dataset_id>,
  'tableId': <table_id>
}

Esempio di codice

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 il progetto e il percorso specificati (sintassi con caratteri jolly) supportate) da usare con Firestore. Impostazione di un ID progetto configurazione di GOOGLE_CLOUD_PROJECT consentirà di utilizzare Variabile di ambiente GOOGLE_CLOUD_PROJECT come ID progetto quando projectId è escluso da Firestore API parameter.

Richiesta da: Firestore

Firma della query: queryPermission('access_firestore', <operation>, <options>)

Note: <operation> è una stringa e può avere i seguenti valori:

  • lettura: concede l'accesso alle API in lettura ed esecuzione di query
  • write: concede l'accesso in scrittura all'API
  • read_write - Concede l'accesso alle API di lettura, scrittura ed query

<options> è un oggetto che contiene i seguenti elementi:

{
  'projectId': <project_id>,
  'path': <path>
}

Esempio di codice

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: consente di accedere alla risposta.

Descrizione: consente di accedere al corpo, alle intestazioni o allo stato della risposta.

Configurazione: opzione per consentire qualsiasi accesso o uno specifico, con opzioni secondarie per e controllare l'accesso a vari sottocomponenti.

Richiedente: setPixelResponse, setResponseBody, setResponseHeader, setResponseStatus

Firma della query: queryPermission('access_response', 'write', <component>[, <optional component name>])

Note: regola se è possibile accedere al componente della risposta HTTP in uscita.

Esempio di codice

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: consente di accedere all'archiviazione del modello

Descrizione: consente l'accesso allo spazio di archiviazione temporaneo per i modelli che possono rimanere invariati per tutta la durata del processo lato server.

Configurazione: nessuna

Richiesta da: templateDataStorage

Firma della query: queryPermission('access_template_storage')

Esempio di codice

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 dei nomi dei cookie che è possibile leggere.

Richiesta da: getCookieValues

Firma della query: queryPermission('get_cookies', <name>)

Note: determina se un cookie può essere letto, a seconda del nome.

Esempio di codice

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 nella console

Descrizione: registra l'account nella Developer Console e utilizza la modalità di anteprima di Tag Manager.

Configurazione:opzione per abilitare il logging in produzione. Il valore predefinito è solo abilita il logging in debug/anteprima. Se l'autorizzazione viene negata, logToConsole non genera un errore, ma eliminerà il messaggio di log.

Richiesta da: logToConsole

Firma della query: queryPermission('logging')

Note: consente di stabilire se un modello personalizzato può accedere alla Developer Console.

Esempio di codice

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 il addMessageListener o sendMessage API.

Configurazione: opzione per specificare il tipo di messaggio e se il modello ascoltare, inviare o entrambi.

Richiesta da: addMessageListener, sendMessage

Firma della query: queryPermission('use_message', <usage>, <message type>)

Note: il valore di utilizzo può essere listen, send o listen_and_send.

Esempio di codice

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 del contenitore

Descrizione: legge i dati relativi al contenitore.

Configurazione: nessuna.

Richiesta da: getClientName, getContainerVersion

Firma della query: queryPermission('read_container_data')

Note: consente di stabilire se un modello personalizzato può leggere i dati del contenitore.

Esempio di codice

const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
  return getContainerVersion();
}

read_event_data

Nome visualizzato: legge i dati sugli eventi

Descrizione: legge i dati dell'evento.

Configurazione: opzione per consentire qualsiasi accesso o accesso specifico controllato un elenco dei percorsi delle chiavi consentiti (sintassi con caratteri jolly supportata).

Richiesta da: getAllEventData, getEventData

Firma della query: queryPermission('read_event_data'[, <optional key>])

Note: consente di stabilire se un modello personalizzato può leggere i dati sugli eventi in una determinata chiave (o tutti i dati dell'evento, se non viene fornito un percorso della chiave).

Esempio di codice

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

Richiesta da: addEventCallback

Firma della query: queryPermission('read_event_metadata')

Note: controlla se un modello personalizzato può leggere i metadati degli eventi nei callback.

Esempio di codice

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 della richiesta, i parametri di query, il corpo, il percorso all'indirizzo IP remoto.

Configurazione: opzione per consentire qualsiasi accesso o uno specifico, con opzioni secondarie per e controllare l'accesso a vari sottocomponenti.

Richiedente: 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.

Esempio di codice

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

Richiesta da: returnResponse

Firma della query: queryPermission('return_response')

Note: questa autorizzazione non ha campi da restringere e in genere non viene eseguita alcuna query.

run_container

Nome visualizzato: esegue il container

Descrizione: esegue il contenitore con un evento

Configurazione: nessuna

Richiesta da: runContainer

Firma della query: queryPermission('run_container')

Nota:questa autorizzazione non ha campi da restringere e in genere non viene eseguita alcuna query. .

send_http

Nome visualizzato: invia le richieste HTTP

Descrizione: invia una richiesta HTTP a un URL specificato.

Obbligatorio per: getGoogleScript, sendEventToGoogleAnalytics, sendHttpGet, sendHttpRequest

Firma della query: queryPermission('send_http', <url>)

Note: determina se è possibile effettuare una richiesta HTTP, in base all'URL. Per garantire una connessione sicura, sono consentiti solo URL sicuri (HTTPS).

Esempio di codice

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 una richiesta GET dal browser a un URL specificato.

Obbligatorio da: sendPixelFromBrowser

Firma della query: queryPermission('send_pixel_from_browser', <url>)

Note: regola se una richiesta può essere inviata dal browser, a seconda dell'URL.

Esempio di codice

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 dei cookie consentiti, ciascuno con opzioni facoltative limitazioni relative a nome, dominio, percorso, attributo secure e scadenza.

Richiesta da: setCookie

Firma della query: queryPermission('set_cookies', <name>, <options>)

Note: determina se un determinato "Set-Cookie" intestazione può essere aggiunta risposta in base al nome, al dominio, al percorso, all'attributo secure e al nome del cookie la scadenza del periodo di conservazione.

Esempio di codice

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 chiavi private contenute in un file di chiavi JSON per la crittografia operazioni aziendali.

Configurazione: un elenco di ID chiave consentiti. Gli ID devono corrispondere alle chiavi il file della chiave JSON a cui fa riferimento la variabile di ambiente SGTM_CREDENTIALS sul server.

Richiesta da: hmacSha256

Firma della query: queryPermission('use_custom_private_keys', <key id>)

Note: regola l'elenco delle chiavi private consentite.

Esempio di codice

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: utilizza le Credenziali predefinite dell'applicazione Google

Descrizione: utilizza le credenziali predefinite di Google per effettuare chiamate a Google su quelle di livello inferiore.

Configurazione: un elenco di ambiti OAuth 2.0 di Google consentiti.

Richiesta da: getGoogleAuth

Firma della query: queryPermission('use_google_credentials', <scopes>)

Note:limita gli ambiti Google OAuth 2.0 consentiti per l'utilizzo con Google su quelle di livello inferiore.

Esempio di codice

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