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