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