Permisos de plantillas personalizadas del servidor

En este documento, se describen los permisos de las plantillas personalizadas del servidor.


Cada permiso tiene las siguientes características:

  • Las APIs que los requieren los verifican.
  • Se detecta automáticamente en JavaScript con zona de pruebas, según las APIs que se usan. Esto sucede a medida que se realizan modificaciones en el editor de plantillas personalizadas (para un bucle de reacción rápido) y cuando se compila el código (para validar que se apliquen los permisos correctos).
  • Se puede editar en el editor de plantillas personalizadas para que el permiso sea más específico.
  • Se puede consultar en JavaScript en zona de pruebas a través de la API de queryPermission.

access_bigquery

Nombre visible: Accede a BigQuery

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

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

Requisito de: BigQuery

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

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

  • write

<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 visible: Accede a Google Firestore

Descripción: Permite el acceso a Google Firestore.

Configuración: Es una opción para permitir que se usen combinaciones de proyecto y ruta de acceso especificadas (se admite la sintaxis de comodines) con Firestore. Configurar un ID de proyecto de GOOGLE_CLOUD_PROJECT permitirá usar la variable de entorno GOOGLE_CLOUD_PROJECT como el ID del proyecto cuando se excluya projectId de Firestore API parameter.

Requisito de: 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 APIs de lectura y consulta.
  • write: Otorga acceso a la API de escritura.
  • read_write: Otorga acceso a las APIs 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);
}

access_response

Nombre visible: Accede a la respuesta

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

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

Obligatorio para: setPixelResponse, setResponseBody, setResponseHeader, setResponseStatus

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

Notas: Regula 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 visible: Accede al almacenamiento de plantillas

Descripción: Permite el acceso al almacenamiento temporal para plantillas que pueden persistir durante el ciclo de vida del proceso del servidor.

Configuración: Ninguna

Requisito de: 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);
}

get_cookies

Nombre visible: Lee los valores de las cookies.

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

Configuración: Es la lista de nombres de cookies permitidas para la lectura.

Requisito de: getCookieValues

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

Notas: Determina si se puede leer una cookie, según 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);
}

registro

Nombre visible: Registra datos en la consola

Descripción: Genera registros en la consola para desarrolladores y en el modo de vista previa de Tag Manager.

Configuración: Es la opción para habilitar el registro en producción. La configuración predeterminada solo habilita el registro en la depuración o la vista previa. Si se deniega el permiso, logToConsole no arrojará un error, pero suprimirá el mensaje de registro.

Requisito de: logToConsole

Firma de consulta: queryPermission('logging')

Notas: Controla si una plantilla personalizada puede acceder a la consola de 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');

use_message

Nombre visible: Usa mensajes.

Descripción: Envía o recibe mensajes con las APIs de addMessageListener o sendMessage.

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

Obligatorio para: 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 visible: Lee datos de contenedores.

Descripción: Lee datos sobre el contenedor.

Configuración: Ninguna.

Obligatorio para: getClientName, getContainerVersion

Firma de consulta: queryPermission('read_container_data')

Notas: Controla si una plantilla personalizada puede leer datos de contenedores.

Código de ejemplo

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

read_event_data

Nombre visible: Lee los datos de eventos.

Descripción: Lee datos del evento.

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

Obligatorio para: 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 de acceso a la clave determinada (o todos los datos del evento, si no se proporciona una ruta de acceso a la 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 visible: Lee los metadatos del evento.

Descripción: Lee los metadatos del evento en las devoluciones de llamada del evento.

Configuración: Ninguna

Requisito de: addEventCallback

Firma de consulta: queryPermission('read_event_metadata')

Notas: Controla si una plantilla personalizada puede leer los metadatos del evento en las 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 visible: Lee la solicitud HTTP.

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

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

Requisito de: extractEventsFromMpv1, extractEventsFromMpv2, getRemoteAddress, getRequestBody, getRequestHeader, getRequestPath, getRequestQueryParameter, getRequestQueryParameters, getRequestQueryString

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

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

return_response

Nombre visible: Muestra la respuesta.

Descripción: Devuelve una respuesta al emisor.

Configuración: Ninguna

Requisito de: returnResponse

Firma de consulta: queryPermission('return_response')

Notas: Este permiso no tiene campos para acotar y, por lo general, no se consulta.

run_container

Nombre visible: Ejecuta el contenedor.

Descripción: Ejecuta el contenedor con un evento.

Configuración: Ninguna

Requisito de: runContainer

Firma de consulta: queryPermission('run_container')

Notas: Este permiso no tiene campos para acotar y, por lo general, no se consulta.

send_http

Nombre visible: Envía solicitudes HTTP.

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

Obligatorio para: 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 URLs 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);
}

send_pixel_from_browser

Nombre visible: Envía píxeles desde navegadores.

Descripción: Envía una solicitud GET a una URL especificada desde el navegador.

Requisito de: sendPixelFromBrowser

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

Notas: Regula 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 visible: Establece una cookie.

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

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

Requisito de: setCookie

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

Notas: Regula si se puede agregar un encabezado "Set-Cookie" determinado a la respuesta, según el nombre, el dominio, la ruta de acceso, el atributo secure y el vencimiento de la cookie.

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

use_custom_private_keys

Nombre visible: Usa claves privadas personalizadas.

Descripción: Usa claves privadas de un archivo de claves JSON para operaciones criptográficas.

Configuración: Es una lista de IDs de claves permitidos. Los IDs deben coincidir con las claves del archivo de claves JSON al que hace referencia la variable de entorno SGTM_CREDENTIALS en el servidor.

Requisito de: hmacSha256

Firma de consulta: queryPermission('use_custom_private_keys', <key id>)

Notas: Regula la lista de claves privadas permitidas.

Código de ejemplo

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

Nombre visible: Usa las credenciales predeterminadas de la aplicación de Google

Descripción: Usa las credenciales predeterminadas de Google para realizar llamadas a las APIs de Google.

Configuración: Es una lista de los alcances de OAuth 2.0 de Google permitidos.

Requisito de: getGoogleAuth

Firma de consulta: queryPermission('use_google_credentials', <scopes>)

Notas: Restringe los permisos de OAuth 2.0 de Google permitidos para usar con las APIs de Google.

Código de ejemplo

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