Permisos de plantillas personalizadas del servidor

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


Cada permiso tiene las siguientes características:

  • Se verifica con las APIs que los requieren.
  • Se detecta automáticamente en JavaScript de zona de pruebas según las APIs que se usan. Esto sucede cuando las modificaciones se realizan en el editor de plantillas personalizadas (para obtener ciclo de retroalimentación), y cuando se compila el código (para validar que el se aplican los permisos).
  • Puede editarse 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: es la opción para permitir el proyecto, el conjunto de datos y la tabla especificados. que se usarán con BigQuery. Establecer una configuración del ID del proyecto de GOOGLE_CLOUD_PROJECT permitirá usar el entorno GOOGLE_CLOUD_PROJECT como el ID del proyecto cuando projectId se excluye de BigQuery API parameter.

Obligatorio para: 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 la opción para permitir el proyecto y la ruta especificados (sintaxis de comodín) combinaciones compatibles) que se usarán con Firestore. Configura un ID del proyecto configuración de GOOGLE_CLOUD_PROJECT permitirá usar el La variable de entorno GOOGLE_CLOUD_PROJECT como ID del proyecto cuando projectId se excluye de Firestore API parameter.

Obligatorio para: Firestore

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

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

  • Lectura: Otorga acceso para leer y consultar las API.
  • Escritura: Otorga acceso para escribir la API.
  • read_write: Otorga acceso para leer, escribir y consultar las API.

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

Obligatorio para: setPixelResponse, setResponseBody, setResponseHeader y 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 visible: 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 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 pueden leer.

Obligatorio para: getCookieValues

Firma de la 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: Registros a la consola

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

Configuración: Es la opción para habilitar el registro en la producción. La configuración predeterminada es solo habilitar el acceso en depuración/vista previa. Si se niega el permiso, logToConsole hará lo siguiente 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: Se envía o recibe mensajes mediante addMessageListener o APIs de sendMessage.

Configuración: Es una opción para especificar el tipo de mensaje y si se usará la plantilla. pueden escuchar, enviar o ambas cosas.

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 los 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 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 datos de eventos.

Descripción: Lee datos del evento.

Configuración: es la 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 clave determinada. path (o todos los datos del evento, si no se proporciona una ruta de 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 de eventos en las 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: opción para permitir cualquier acceso o acceso específico, con subopciones para controlar el acceso a varios subcomponentes.

Obligatorio para: extractEventsFromMpv1, extractEventsFromMpv2, getRemoteAddress, getRequestBody y getRequestHeader getRequestPath, getRequestQueryParameter y 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') { ... }

return_response

Nombre visible: Muestra la 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 limitar 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 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 específica desde el navegador.

Obligatorio para: sendPixelFromBrowser

Firma de la 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 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 permitidas, cada uno con Restricciones 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 una "Set-Cookie" determinada del encabezado de la versión según el nombre de la cookie, el dominio, la ruta de acceso, el atributo secure y de 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: Se usan claves privadas de un archivo de claves JSON para criptografía las operaciones.

Configuración: Es una lista de los IDs de clave permitidos. Los ID deben coincidir con las claves de el 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: Se usan las credenciales predeterminadas de Google para realizar llamadas a Google APIs

Configuración: Es una lista de permisos de Google OAuth 2.0.

Obligatorio para: getGoogleAuth

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

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

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