Permisos de plantilla personalizada del lado del servidor

Este documento describe los permisos para las plantillas personalizadas del lado del servidor.


Cada permiso es:

  • Comprobado por las API que lo requieren.
  • Detectado automáticamente en JavaScript en espacio aislado, según las API que se utilicen. Esto sucede cuando se realizan ediciones en el editor de plantillas personalizadas (para un bucle de retroalimentación rápido) y cuando se compila el código (para validar que se aplican los permisos correctos).
  • Editable en el editor de plantillas personalizadas, para que el permiso sea más específico.
  • Consultable en JavaScript en espacio aislado a través de la API queryPermission .

acceso_bigquery

Nombre para mostrar: Accede a BigQuery

Descripción: permite el acceso a BigQuery en Google Cloud Platform.

Configuración: opción para permitir el uso de combinaciones específicas de proyectos, conjuntos de datos y tablas con BigQuery. Establecer una configuración de ID de proyecto de GOOGLE_CLOUD_PROJECT permitirá usar la variable de entorno GOOGLE_CLOUD_PROJECT como ID de proyecto cuando projectId se excluye del BigQuery API parameter .

Requerido por: BigQuery

Firma de consulta: queryPermission('access_bigquery', <operation>, <options>)

Notas: <operation> es una cadena y puede tener los siguientes valores:

  • escribir

<options> es un objeto que contiene los siguientes elementos:

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

Código de ejemplo

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

Nombre para mostrar: Accede a Google Firestore

Descripción: Permite el acceso a Google Firestore.

Configuración: Opción para permitir el uso de combinaciones específicas de proyectos y rutas (sintaxis comodín admitida) con Firestore. Establecer una configuración de ID de proyecto de GOOGLE_CLOUD_PROJECT permitirá usar la variable de entorno GOOGLE_CLOUD_PROJECT como ID de proyecto cuando projectId se excluye del Firestore API parameter .

Requerido por: Firestore

Firma de consulta: queryPermission('access_firestore', <operation>, <options>)

Notas: <operation> es una cadena y puede tener los siguientes valores:

  • read - Otorga acceso a las API de lectura y consulta
  • write - Otorga acceso a la API de escritura
  • read_write: otorga acceso a las API de lectura, escritura y consulta

<options> es un objeto que contiene los siguientes elementos:

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

Código de ejemplo

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

acceso_respuesta

Nombre para mostrar: Accede a la respuesta

Descripción: accede al cuerpo de la respuesta, los encabezados o el estado.

Configuración: opción para permitir cualquier acceso o acceso específico, con subopciones para controlar el acceso a varios subcomponentes.

Requerido por: setPixelResponse , setResponseBody , setResponseHeader , setResponseStatus

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

Notas: determina si se puede acceder al componente de respuesta HTTP saliente.

Código de ejemplo

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

Nombre simplificado: Accede al almacenamiento de plantillas

Descripción: permite el acceso al almacenamiento temporal para plantillas que pueden persistir durante la vida útil del proceso del lado del servidor.

Configuración: Ninguna

Requerido por: templateDataStorage

Firma de consulta: queryPermission('access_template_storage')

Código de ejemplo

const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
  const value = templateDataStorage.getItemCopy(key);
}

obtener_cookies

Nombre para mostrar: lee los valores de las cookies

Descripción: Lee los valores de las cookies con el nombre especificado.

Configuración: Lista de nombres de cookies permitidas para lectura.

Requerido por: getCookieValues

Firma de consulta: queryPermission('get_cookies', <name>)

Notas: determina si se puede leer una cookie, dependiendo de su nombre.

Código de ejemplo

const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
  cookieValues = getCookieValues(cookieName);
}

Inicio sesión

Nombre para mostrar: Registros en la consola

Descripción: inicia sesión en la consola del desarrollador y en el modo de vista previa de Tag Manager.

Configuración: Opción para habilitar el inicio de sesión en producción. Los valores predeterminados solo permiten iniciar sesión en depuración/vista previa. Si se deniega el permiso, logToConsole no generará un error, pero suprimirá el mensaje de registro.

Requerido por: logToConsole

Firma de consulta: queryPermission('logging')

Notas: controla si una plantilla personalizada puede iniciar sesión en la consola del desarrollador.

Código de ejemplo

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

usar_mensaje

Nombre para mostrar: Usa mensajes

Descripción: envía o recibe mensajes mediante las API addMessageListener o sendMessage .

Configuración: Opción para especificar el tipo de mensaje y si la plantilla puede escuchar, enviar o ambos.

Requerido por: addMessageListener , sendMessage

Firma de consulta: queryPermission('use_message', <usage>, <message type>)

Notas: El uso puede ser listen , send o listen_and_send .

Código de ejemplo

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

Nombre para mostrar: lee los datos del contenedor

Descripción: Lee datos sobre el contenedor.

Configuración: Ninguna.

Requerido por: getClientName , getContainerVersion

Firma de consulta: queryPermission('read_container_data')

Notas: controla si una plantilla personalizada puede leer datos de contenedor.

Código de ejemplo

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

leer_eventos_datos

Nombre para mostrar: lee datos de eventos

Descripción: Lee datos del evento.

Configuración: Opción para permitir cualquier acceso, o acceso específico controlado por una lista de rutas de claves permitidas (se admite la sintaxis de comodines).

Requerido por: getAllEventData , getEventData

Firma de consulta: queryPermission('read_event_data'[, <optional key>])

Notas: controla si una plantilla personalizada puede leer datos de eventos en una ruta clave dada (o todos los datos de eventos, si no se proporciona ninguna ruta clave).

Código de ejemplo

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

Nombre para mostrar: lee metadatos de eventos

Descripción: lee metadatos de eventos en devoluciones de llamadas de eventos

Configuración: Ninguna

Requerido por: addEventCallback

Firma de consulta: queryPermission('read_event_metadata')

Notas: controla si una plantilla personalizada puede leer metadatos de eventos en devoluciones de llamada.

Código de ejemplo

const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
  addEventCallback((containerId, eventMetadata) => {
    // Read event metadata.
  });
}

read_request

Nombre para mostrar: lee la solicitud HTTP

Descripción: lee los encabezados de la solicitud, los parámetros de la consulta, el cuerpo, la ruta o la dirección IP remota.

Configuración: opción para permitir cualquier acceso o acceso específico, con subopciones para controlar el acceso a varios subcomponentes.

Requerido por: extractEventsFromMpv1 , extractEventsFromMpv2 , getRemoteAddress , getRequestBody , getRequestHeader , getRequestPath , getRequestQueryParameter , getRequestQueryParameters , getRequestQueryString

Firma de consulta: queryPermission('read_request', <component>[, <optional component name>])

Notas: determina si se puede acceder al componente de respuesta HTTP entrante.

Código de ejemplo

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') { ... }

respuesta_retorno

Nombre para mostrar: Devuelve la respuesta

Descripción: Devuelve la respuesta a la persona que llama.

Configuración: Ninguna

Requerido por: returnResponse

Firma de consulta: queryPermission('return_response')

Notas: este permiso no tiene campos para limitar y, por lo general, no se consulta.

ejecutar_contenedor

Nombre para mostrar: ejecuta el contenedor

Descripción: Ejecuta el contenedor con un evento

Configuración: Ninguna

Requerido por: runContainer

Firma de consulta: queryPermission('run_container')

Notas: este permiso no tiene campos para limitar y, por lo general, no se consulta.

enviar_http

Nombre para mostrar: envía solicitudes HTTP

Descripción: envía una solicitud HTTP a una URL especificada.

Requerido por: getGoogleScript , sendEventToGoogleAnalytics , sendHttpGet , sendHttpRequest

Firma de consulta: queryPermission('send_http', <url>)

Notas: determina si se puede realizar una solicitud HTTP, según la URL. Para garantizar una conexión segura, solo se permiten URL seguras (HTTPS).

Código de ejemplo

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

enviar_pixel_desde_navegador

Nombre para mostrar: envía píxeles desde los navegadores

Descripción: envía una solicitud GET a una URL específica desde el navegador.

Requerido por: sendPixelFromBrowser

Firma de consulta: queryPermission('send_pixel_from_browser', <url>)

Notas: determina si se puede enviar una solicitud desde el navegador, según la URL.

Código de ejemplo

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

Nombre para mostrar: Establece una cookie

Descripción: establece una cookie con el nombre y los parámetros especificados.

Configuración: una tabla de nombres de cookies permitidos, cada uno con restricciones opcionales de nombre, dominio, ruta, atributo secure y vencimiento.

Requerido por: setCookie

Firma de consulta: queryPermission('set_cookies', <name>, <options>)

Notas: determina si se puede agregar un encabezado 'Set-Cookie' dado a la respuesta, según el nombre de la cookie, el dominio, la ruta, el atributo secure y la caducidad.

Código de ejemplo

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