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