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:

  • Verificados por las APIs que los requieren.
  • Se detecta automáticamente en JavaScript de zona de pruebas según las APIs que se usan. Esto sucede a medida que se realizan ediciones en el editor de plantillas personalizadas (para un bucle de comentarios 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 de 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: opción para permitir que las combinaciones de proyecto, conjunto de datos y tabla especificadas se usen con BigQuery. Establecer una configuración de ID del proyecto de GOOGLE_CLOUD_PROJECT permitirá usar la variable de entorno GOOGLE_CLOUD_PROJECT como ID del proyecto cuando projectId se excluya de BigQuery API parameter.

Obligatorio para: BigQuery

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

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

  • escritura

<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 el uso de combinaciones especificadas de proyectos y rutas de acceso (compatible con sintaxis comodín) con Firestore. Establecer una configuración de ID del proyecto como GOOGLE_CLOUD_PROJECT permitirá usar la variable de entorno GOOGLE_CLOUD_PROJECT como ID del proyecto cuando projectId se excluya de Firestore API parameter.

Obligatorio para: Firestore

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

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

  • read: Otorga acceso para leer y consultar APIs.
  • Write: Otorga acceso de escritura a la API.
  • read_write: Otorga acceso para leer, escribir y consultar APIs.

<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 una opción para permitir cualquier acceso o un acceso específico, con subopciones para controlar el acceso a varios subcomponentes.

Obligatorio para: setPixelResponse, setResponseBody, setResponseHeader y setResponseStatus

Firma de la 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

Display name: Accede al almacenamiento de plantillas.

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

Configuración: ninguna

Obligatorio para: templateDataStorage

Firma de la 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: Lista de nombres de cookies que se permiten para la lectura.

Obligatorio para: getCookieValues

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

Notas: Determina si una cookie se puede leer en función 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);
}

registro

Nombre visible: Registros a la consola

Descripción: Registros a la consola para desarrolladores y al modo de vista previa de Tag Manager.

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

Obligatorio para: logToConsole

Firma de la consulta: queryPermission('logging')

Notas: Controla si una plantilla personalizada puede registrarse en Play Console.

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 mediante las APIs de addMessageListener o sendMessage.

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

Obligatorio para: addMessageListener, sendMessage

Firma de la 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 del contenedor.

Descripción: Lee datos sobre el contenedor.

Configuración: Ninguna.

Obligatorio para: getClientName, getContainerVersion

Firma de la 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();
}

read_event_data

Nombre visible: Lee datos de eventos.

Descripción: Lee datos del evento.

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

Obligatorio para: getAllEventData, getEventData

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

Notas: Controla si una plantilla personalizada puede leer datos de eventos en una ruta de acceso clave determinada (o todos los datos del evento, si no se proporciona una ruta de acceso de 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 metadatos de eventos en devoluciones de llamada de eventos.

Configuración: ninguna

Obligatorio para: addEventCallback

Firma de la 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 visible: Lee la solicitud HTTP.

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

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

Obligatorio para: extractEventsFromMpv1, extractEventsFromMpv2, getRemoteAddress, getRequestBody, getRequestHeader, getRequestPath, getRequestQueryParameter, getRequestQueryParameters, getRequestQueryString

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

return_response

Nombre visible: Muestra una respuesta.

Descripción: Muestra una respuesta al emisor.

Configuración: ninguna

Obligatorio para: returnResponse

Firma de la 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

Obligatorio para: runContainer

Firma de la 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 y sendHttpRequest

Firma de la 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 (HTTPS) seguras.

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 los navegadores.

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

Obligatorio para: sendPixelFromBrowser

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

Notas: Determina si una solicitud se puede enviar 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: Configura una cookie con el nombre y los parámetros especificados.

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

Obligatorio para: setCookie

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

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

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: Una lista de los IDs de clave permitidos. Los ID deben coincidir con las claves del archivo de claves JSON al que hace referencia la variable de entorno SGTM_CREDENTIALS en el servidor.

Obligatorio para: hmacSha256

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

Notas: Administra 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: Una lista de los permisos de Google OAuth 2.0 permitidos.

Obligatorio para: getGoogleAuth

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

Notas: Restringe los permisos permitidos de Google OAuth 2.0 para su uso 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);
}