Este documento descreve as permissões para modelos personalizados no servidor.
Todas as permissões são:
- verificadas pelas APIs que as exigem;
- detectadas automaticamente em JavaScript em sandbox, com base em quais APIs são usadas. Isso acontece porque as edições são feitas no editor de modelos personalizados (para um loop de feedback rápido) e quando o código é compilado (para validar se as permissões corretas foram aplicadas);
- modificáveis no editor de modelos personalizados para tornar a permissão mais específica;
- consultáveis em JavaScript no modo sandbox pela API
queryPermission
.
access_bigquery
Nome de exibição: acessa o BigQuery.
Descrição: permite acesso ao BigQuery no Google Cloud Platform.
Configuração: opção que permite que as combinações de projeto, conjunto de dados e tabela especificadas sejam usadas com o BigQuery. Defina o ID do projeto como GOOGLE_CLOUD_PROJECT
para permitir o uso da variável de ambiente GOOGLE_CLOUD_PROJECT
como ID quando projectId
for excluído de BigQuery API
parameter
.
Solicitado por: BigQuery
Assinatura da consulta: queryPermission('access_bigquery', <operation>, <options>)
Observações: <operation>
é uma string e pode ter os valores listados a seguir.
- write
<options>
é um objeto que contém os seguintes itens:
{
'projectId': <project_id>,
'datasetId': <dataset_id>,
'tableId': <table_id>
}
Código de exemplo
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
Nome de exibição: acessa o Google Firestore.
Descrição: permite acesso ao Google Firestore.
Configuração: opção que permite que as combinações de projeto e caminho (sintaxe de caractere curinga compatível) especificadas sejam usadas com o Firestore. Defina o ID do projeto como GOOGLE_CLOUD_PROJECT
para permitir o uso da variável de ambiente GOOGLE_CLOUD_PROJECT
como ID quando projectId
for excluído de Firestore API parameter
.
Solicitado por: Firestore
Assinatura da consulta: queryPermission('access_firestore', <operation>, <options>)
Observações: <operation>
é uma string e pode ter os valores listados a seguir.
- read: dá acesso para ler e consultar APIs
- write: dá acesso para gravar nas APIs
- read_write: dá acesso para ler, gravar e consultar as APIs
<options>
é um objeto que contém os seguintes itens:
{
'projectId': <project_id>,
'path': <path>
}
Código de exemplo
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
Nome de exibição: acessa a resposta.
Descrição: acessa o corpo, os cabeçalhos ou o status da resposta.
Configuração: opção que permite acessos gerais ou específicos, com subopções para controlar o acesso a vários subcomponentes.
Solicitado por: setPixelResponse
, setResponseBody
, setResponseHeader
e setResponseStatus
Assinatura da consulta: queryPermission('access_response', 'write', <component>[, <optional component name>])
Observações: controla se o componente de saída da resposta HTTP pode ser acessado.
Código de exemplo
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
Nome de exibição: acessa o armazenamento de modelos.
Descrição: permite acesso ao armazenamento temporário para modelos que duram por todo o ciclo de vida do processo do lado do servidor.
Configuração: nenhuma
Solicitado por: templateDataStorage
.
Assinatura da consulta: queryPermission('access_template_storage')
.
Código de exemplo
const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
const value = templateDataStorage.getItemCopy(key);
}
get_cookies
Nome de exibição: Reads cookie value(s)
Descrição: lê os valores dos cookies com os nomes especificados.
Configuração: lista de nomes dos cookies permitidos para leitura.
Solicitado por: getCookieValues
.
Assinatura da consulta: queryPermission('get_cookies', <name>)
.
Observações: determina se um cookie pode ser lido, dependendo do nome.
Código de exemplo
const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
cookieValues = getCookieValues(cookieName);
}
logging
Nome de exibição: registra no console.
Descrição: registra mensagens no console do desenvolvedor e no modo de visualização do Gerenciador de tags.
Configuração: opção para ativar registros em produção. O padrão é ativar os registros apenas na depuração/visualização. Quando a permissão é negada, logToConsole
não gera um erro, mas suprime a mensagem de registro.
Solicitado por: logToConsole
.
Assinatura da consulta: queryPermission('logging')
.
Observações: define se um modelo personalizado pode fazer registros no console do desenvolvedor.
Código de exemplo
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
Nome de exibição: usa mensagens.
Descrição: envia ou recebe mensagens usando as APIs addMessageListener
ou sendMessage
.
Configuração: opção para especificar o tipo de mensagem e se o modelo pode ouvir, enviar ou ambos.
Solicitado por: addMessageListener
, sendMessage
Assinatura da consulta: queryPermission('use_message', <usage>, <message type>)
.
Observações: o uso pode ser listen
, send
ou listen_and_send
.
Código de exemplo
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
Nome de exibição: lê dados do contêiner.
Descrição: lê dados sobre o contêiner.
Configuração: nenhuma.
Solicitado por: getClientName
, getContainerVersion
.
Assinatura da consulta: queryPermission('read_container_data')
.
Observações: controla se um modelo personalizado pode ler dados do contêiner.
Código de exemplo
const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
return getContainerVersion();
}
read_event_data
Nome de exibição: lê dados do evento.
Descrição: lê dados que vieram do evento.
Configuração: opção que permite acesso geral ou acesso controlado específico por uma lista de caminhos de chave permitidos (sintaxe de caractere curinga compatível).
Solicitado por: getAllEventData
, getEventData
Assinatura da consulta: queryPermission('read_event_data'[, <optional key>])
Observações: controla se um modelo personalizado pode ler dados de eventos em um determinado caminho de chave (ou todos os dados do evento, se nenhum caminho desses for informado).
Código de exemplo
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
Nome de exibição: lê metadados de evento.
Descrição: lê metadados de evento em callbacks de evento.
Configuração: nenhuma
Solicitado por: addEventCallback
.
Assinatura da consulta: queryPermission('read_event_metadata')
.
Observações: controla se um modelo personalizado pode ler metadados de evento em callbacks.
Código de exemplo
const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
addEventCallback((containerId, eventMetadata) => {
// Read event metadata.
});
}
read_request
Nome de exibição: lê a solicitação HTTP.
Descrição: lê cabeçalhos da solicitação, parâmetros de consulta, corpo, caminho ou endereço IP remoto.
Configuração: opção que permite acessos gerais ou específicos, com subopções para controlar o acesso a vários subcomponentes.
Solicitado por: extractEventsFromMpv1
, extractEventsFromMpv2
, getRemoteAddress
, getRequestBody
, getRequestHeader
, getRequestPath
, getRequestQueryParameter
, getRequestQueryParameters
, getRequestQueryString
Assinatura da consulta: queryPermission('read_request', <component>[, <optional component name>])
Observações: determina se o componente de entrada da resposta HTTP pode ser acessado.
Código de exemplo
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
Nome de exibição: retorna a resposta.
Descrição: retorna a resposta ao autor da chamada.
Configuração: nenhuma
Solicitado por: returnResponse
.
Assinatura da consulta: queryPermission('return_response')
Observações: essa permissão não tem campos para servir de critério e normalmente não é consultada.
run_container
Nome de exibição: executa o contêiner.
Descrição: executa o contêiner com um evento.
Configuração: nenhuma
Solicitado por: runContainer
.
Assinatura da consulta: queryPermission('run_container')
Observações: essa permissão não tem campos para servir de critério e normalmente não é consultada.
send_http
Nome de exibição: envia solicitações HTTP.
Descrição: envia uma solicitação HTTP para um URL especificado.
Solicitado por: getGoogleScript
, sendEventToGoogleAnalytics
, sendHttpGet
e sendHttpRequest
Assinatura da consulta: queryPermission('send_http', <url>)
Observações: determina se uma solicitação HTTP pode ser feita, dependendo do URL. Para garantir uma conexão segura, apenas URLs (HTTPS) seguros são permitidos.
Código de exemplo
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
Nome de exibição: envia pixels dos navegadores
Descrição: envia uma solicitação GET a um URL especificado do navegador.
Solicitado por: sendPixelFromBrowser
.
Assinatura da consulta: queryPermission('send_pixel_from_browser', <url>)
.
Observações: controla se uma solicitação pode ser enviada do navegador, dependendo do URL.
Código de exemplo
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
Nome de exibição: Sets a cookie
Descrição: define um cookie com o nome e os parâmetros especificados.
Configuração: tabela com os nomes dos cookies permitidos, cada um com restrições opcionais de nome, domínio, caminho, atributo secure
e validade.
Solicitado por: setCookie
.
Assinatura da consulta: queryPermission('set_cookies', <name>, <options>)
Observações: determina se algum cabeçalho "Set-Cookie" pode ser adicionado à resposta, dependendo do nome, do domínio, do caminho e do atributo secure
e da validade do cookie.
Código de exemplo
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);
}