مجوزهای قالب سفارشی سمت سرور

این سند مجوزهای قالب های سفارشی سمت سرور را مشخص می کند.


هر مجوز عبارت است از:

  • توسط APIهایی که به آنها نیاز دارند بررسی شده است.
  • به طور خودکار در جاوا اسکریپت جعبه شنی، بر اساس API هایی که استفاده می شود، شناسایی می شود. این زمانی اتفاق می‌افتد که ویرایش‌ها در ویرایشگر قالب سفارشی (برای یک حلقه بازخورد سریع)، و زمانی که کد کامپایل می‌شود (برای تأیید اینکه مجوزهای صحیح اعمال شده‌اند) انجام می‌شود.
  • قابل ویرایش در ویرایشگر قالب سفارشی، برای مشخص کردن مجوز.
  • از طریق queryPermission API در جاوا اسکریپت sandboxed قابل استعلام است.

access_bigquery

نام نمایشی: به BigQuery دسترسی دارد

توضیحات: اجازه دسترسی به BigQuery در Google Cloud Platform را می‌دهد.

پیکربندی: گزینه ای برای اجازه دادن به پروژه مشخص شده، مجموعه داده و ترکیبات جدول برای استفاده با BigQuery. تنظیم یک پیکربندی شناسه پروژه برای GOOGLE_CLOUD_PROJECT امکان استفاده از متغیر محیطی GOOGLE_CLOUD_PROJECT را به عنوان شناسه پروژه در زمانی که projectId از BigQuery API parameter حذف می‌شود، فراهم می‌کند.

مورد نیاز: BigQuery

امضای درخواست: queryPermission('access_bigquery', <operation>, <options>)

نکته: <operation> یک رشته است و می تواند مقادیر زیر را داشته باشد:

  • نوشتن

<options> یک شی حاوی موارد زیر است:

{
  'projectId': <project_id>,
  'datasetId': <dataset_id>,
  'tableId': <table_id>
}

کد نمونه

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

نام نمایشی: به Google Firestore دسترسی دارد

توضیحات: اجازه دسترسی به Google Firestore را می دهد.

پیکربندی: گزینه ای برای اجازه دادن به ترکیبات پروژه و مسیر مشخص شده (پشتیبانی از نحو عام) برای استفاده با Firestore. تنظیم پیکربندی شناسه پروژه برای GOOGLE_CLOUD_PROJECT امکان استفاده از متغیر محیطی GOOGLE_CLOUD_PROJECT را به عنوان شناسه پروژه در زمانی که projectId از Firestore API parameter حذف می‌شود، فراهم می‌کند.

مورد نیاز: Firestore

امضای درخواست: queryPermission('access_firestore', <operation>, <options>)

نکته: <operation> یک رشته است و می تواند مقادیر زیر را داشته باشد:

  • خواندن - به API های خواندن و پرس و جو دسترسی می دهد
  • نوشتن - اجازه دسترسی به نوشتن API را می دهد
  • read_write - به API های خواندن، نوشتن و پرس و جو دسترسی می دهد

<options> یک شی حاوی موارد زیر است:

{
  'projectId': <project_id>,
  'path': <path>
}

کد نمونه

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

نام نمایشی: به پاسخ دسترسی دارد

توضیحات: به بدنه پاسخ، سرصفحه ها یا وضعیت دسترسی دارد.

پیکربندی: گزینه ای برای اجازه دسترسی به یک یا خاص، با گزینه های فرعی برای کنترل دسترسی به اجزای فرعی مختلف.

مورد نیاز: setPixelResponse ، setResponseBody ، setResponseHeader ، setResponseStatus

امضای درخواست: queryPermission('access_response', 'write', <component>[, <optional component name>])

یادداشت ها: تعیین می کند که آیا می توان به مؤلفه پاسخ HTTP خروجی دسترسی داشت یا خیر.

کد نمونه

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

نام نمایشی: به ذخیره سازی الگو دسترسی دارد

توضیحات: امکان دسترسی به فضای ذخیره‌سازی موقت برای الگوهایی که می‌توانند در طول عمر فرآیند سمت سرور باقی بمانند را می‌دهد.

پیکربندی: هیچ

مورد نیاز: templateDataStorage

امضای درخواست: queryPermission('access_template_storage')

کد نمونه

const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
  const value = templateDataStorage.getItemCopy(key);
}

دریافت_کوکی ها

نام نمایشی: ارزش(های) کوکی را می خواند

توضیحات: مقادیر کوکی ها را با نام مشخص شده می خواند.

پیکربندی: فهرست نام کوکی‌های مجاز برای خواندن.

مورد نیاز: getCookieValues

امضای درخواست: queryPermission('get_cookies', <name>)

یادداشت ها: بسته به نام کوکی، تعیین می کند که آیا می توان یک کوکی را خواند.

کد نمونه

const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
  cookieValues = getCookieValues(cookieName);
}

چوب بری

نام نمایشی: گزارش به کنسول

توضیحات: به کنسول برنامه‌نویس و حالت پیش‌نمایش Tag Manager وارد می‌شود.

پیکربندی: گزینه ای برای فعال کردن ورود به سیستم در تولید. به طور پیش فرض فقط ورود به سیستم در اشکال زدایی/پیش نمایش را فعال می کند. اگر مجوز رد شود، logToConsole خطایی ایجاد نمی کند، اما پیام گزارش را سرکوب می کند.

مورد نیاز: logToConsole

امضای درخواست: queryPermission('logging')

یادداشت ها: کنترل می کند که آیا یک الگوی سفارشی می تواند به کنسول توسعه دهنده وارد شود یا خیر.

کد نمونه

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

نمایش نام: از پیام ها استفاده می کند

توضیحات: با استفاده از addMessageListener یا sendMessage API ها را ارسال یا دریافت می کند.

پیکربندی: گزینه ای برای تعیین نوع پیام و اینکه آیا الگو می تواند گوش دهد، ارسال کند یا هر دو.

مورد نیاز: addMessageListener ، sendMessage

امضای درخواست: queryPermission('use_message', <usage>, <message type>)

یادداشت ها: استفاده می تواند یکی از listen ، send یا listen_and_send باشد.

کد نمونه

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

نام نمایشی: داده های کانتینر را می خواند

توضیحات: داده های مربوط به ظرف را می خواند.

پیکربندی: هیچ.

مورد نیاز: getClientName ، getContainerVersion

امضای درخواست: queryPermission('read_container_data')

یادداشت ها: کنترل می کند که آیا یک الگوی سفارشی می تواند داده های ظرف را بخواند یا خیر.

کد نمونه

const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
  return getContainerVersion();
}

خواندن_رویداد_داده

نام نمایشی: داده های رویداد را می خواند

توضیحات: داده های رویداد را می خواند.

پیکربندی: گزینه ای برای اجازه دادن به هر گونه دسترسی یا دسترسی خاص که توسط لیستی از مسیرهای کلیدی مجاز کنترل می شود (قالب دستوری پشتیبانی می شود).

مورد نیاز: getAllEventData ، getEventData

امضای درخواست: queryPermission('read_event_data'[, <optional key>])

یادداشت‌ها: کنترل می‌کند که آیا یک الگوی سفارشی می‌تواند داده‌های رویداد را در یک مسیر کلیدی معین بخواند (یا همه داده‌های رویداد، اگر مسیر کلیدی داده نشده باشد).

کد نمونه

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

نام نمایشی: فراداده رویداد را می خواند

توضیحات: فراداده رویداد را در رویداد Callbacks می خواند

پیکربندی: هیچ

مورد نیاز توسط: addEventCallback

امضای درخواست: queryPermission('read_event_metadata')

یادداشت‌ها: کنترل می‌کند که آیا یک الگوی سفارشی می‌تواند فراداده رویداد را در فراخوان‌ها بخواند یا خیر.

کد نمونه

const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
  addEventCallback((containerId, eventMetadata) => {
    // Read event metadata.
  });
}

read_request

نام نمایشی: درخواست HTTP را می خواند

توضیحات: سرصفحه های درخواست، پارامترهای پرس و جو، بدنه، مسیر یا آدرس IP راه دور را می خواند.

پیکربندی: گزینه ای برای اجازه دسترسی به یک یا خاص، با گزینه های فرعی برای کنترل دسترسی به اجزای فرعی مختلف.

مورد نیاز: extractEventsFromMpv1 , extractEventsFromMpv2 , getRemoteAddress , getRequestBody , getRequestHeader , getRequestPath , getRequestQueryParameter , getRequestQueryParameters , getRequestQueryString

امضای درخواست: queryPermission('read_request', <component>[, <optional component name>])

یادداشت ها: تعیین می کند که آیا می توان به مؤلفه پاسخ HTTP ورودی دسترسی داشت یا خیر.

کد نمونه

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

بازگشت_پاسخ

نام نمایشی: پاسخ را برمی‌گرداند

توضیحات: پاسخ را به تماس گیرنده برمی گرداند.

پیکربندی: هیچ

مورد نیاز: returnResponse

امضای درخواست: queryPermission('return_response')

نکات: این مجوز هیچ فیلدی برای محدود کردن ندارد و معمولاً برای آن درخواست نمی شود.

run_container

نمایش نام: کانتینر را اجرا می کند

توضیحات: کانتینر را با یک رویداد اجرا می کند

پیکربندی: هیچ

مورد نیاز: runContainer

امضای درخواست: queryPermission('run_container')

نکات: این مجوز هیچ فیلدی برای محدود کردن ندارد و معمولاً برای آن درخواست نمی شود.

send_http

نام نمایشی: درخواست های HTTP را ارسال می کند

توضیحات: یک درخواست HTTP را به یک URL مشخص ارسال می کند.

مورد نیاز: getGoogleScript , sendEventToGoogleAnalytics , sendHttpGet , sendHttpRequest

امضای درخواست: queryPermission('send_http', <url>)

یادداشت ها: بسته به URL، تعیین می کند که آیا می توان درخواست HTTP کرد یا خیر. برای اطمینان از اتصال ایمن، فقط URL های امن (HTTPS) مجاز هستند.

کد نمونه

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

نام نمایشی: پیکسل ها را از مرورگرها ارسال می کند

توضیحات: درخواست GET را از مرورگر به URL مشخصی ارسال می کند.

مورد نیاز: sendPixelFromBrowser

امضای درخواست: queryPermission('send_pixel_from_browser', <url>)

یادداشت ها: بسته به URL، تعیین می کند که آیا درخواستی می تواند از مرورگر ارسال شود یا خیر.

کد نمونه

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

مجموعه_کوکی ها

نام نمایشی: یک کوکی تنظیم می کند

توضیحات: یک کوکی با نام و پارامترهای مشخص شده تنظیم می کند.

پیکربندی: جدولی از نام‌های مجاز کوکی، که هر کدام دارای محدودیت‌های اختیاری در نام، دامنه، مسیر، ویژگی secure و انقضا هستند.

مورد نیاز: setCookie

امضای درخواست: queryPermission('set_cookies', <name>, <options>)

یادداشت‌ها: بسته به نام کوکی، دامنه، مسیر، ویژگی secure و انقضا، تعیین می‌کند که آیا یک سرصفحه «Set-Cookie» می‌تواند به پاسخ اضافه شود.

کد نمونه

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

نام نمایشی: از کلیدهای خصوصی سفارشی استفاده می کند

توضیحات: از کلیدهای خصوصی یک فایل کلید JSON برای عملیات رمزنگاری استفاده می کند.

پیکربندی: لیستی از شناسه های کلید مجاز. شناسه ها باید با کلیدهای موجود در فایل کلید JSON که توسط متغیر محیطی SGTM_CREDENTIALS در سرور ارجاع شده است مطابقت داشته باشند.

مورد نیاز: hmacSha256

امضای درخواست: queryPermission('use_custom_private_keys', <key id>)

یادداشت ها: فهرست کلیدهای خصوصی مجاز را کنترل می کند.

کد نمونه

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

نام نمایشی: از اعتبار پیش فرض برنامه Google استفاده می کند

توضیحات: از اعتبارنامه های پیش فرض Google برای برقراری تماس با API های Google استفاده می کند.

پیکربندی: فهرستی از محدوده های مجاز Google OAuth 2.0 .

مورد نیاز: getGoogleAuth

امضای درخواست: queryPermission('use_google_credentials', <scopes>)

نکات: محدوده های مجاز Google OAuth 2.0 را برای استفاده با API های Google محدود می کند.

کد نمونه

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