أذونات النماذج المخصَّصة من جهة الخادم

يوضّح هذا المستند أذونات النماذج المخصّصة من جهة الخادم.


وكل إذن هو:

  • يتم التحقّق من هذه الأذونات من خلال واجهات برمجة التطبيقات التي تتطلّبها.
  • يتم رصدها تلقائيًا في JavaScript ضمن وضع الحماية، استنادًا إلى واجهات برمجة التطبيقات المستخدَمة. يحدث ذلك عند إجراء تعديلات في محرِّر النماذج المخصّصة (للحصول على تقرير ملاحظات وآراء سريع)، وعند تجميع الرمز البرمجي (للتحقّق من فرض الأذونات الصحيحة).
  • يمكن تعديلها في محرِّر النماذج المخصّصة لجعل الإذن أكثر تحديدًا.
  • يمكن الاستعلام عنها في JavaScript في وضع الحماية من خلال واجهة برمجة التطبيقات queryPermission.

access_bigquery

الاسم المعروض: Accesses 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> هي سلسلة ويمكن أن تتضمّن القيم التالية:

  • read: يمنح الإذن بقراءة واجهات برمجة التطبيقات وإجراء طلبات بحث فيها
  • write - يمنح الإذن بالوصول إلى واجهة برمجة التطبيقات للكتابة
  • ‫read_write: يمنح الإذن بالوصول إلى واجهات برمجة التطبيقات للقراءة والكتابة وإرسال طلبات البحث

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

get_cookies

الاسم المعروض: قراءة قيم ملفات تعريف الارتباط

الوصف: يتيح هذا الإذن قراءة قيم ملفات تعريف الارتباط التي تحمل الاسم المحدّد.

الإعداد: قائمة بأسماء ملفات تعريف الارتباط المسموح بقراءتها.

مطلوب من قِبل: 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);
}

تسجيل

الاسم المعروض: إرسال سجلّات إلى وحدة التحكّم

الوصف: يتيح هذا الإذن إرسال سجلّات إلى وحدة تحكّم المطوّرين وفي وضع المعاينة في أداة "إدارة العلامات من Google".

الإعداد: خيار لتفعيل التسجيل في مرحلة الإنتاج. يتم ضبطه تلقائيًا على تفعيل تسجيل البيانات في وضع تصحيح الأخطاء أو المعاينة فقط. في حال رفض الإذن، لن يعرض 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.

الإعدادات: خيار لتحديد نوع الرسالة وما إذا كان بإمكان النموذج الاستماع أو الإرسال أو كليهما.

مطلوبة من قِبل: 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();
}

read_event_data

الاسم المعروض: قراءة بيانات الأحداث

الوصف: يتيح هذا الإذن قراءة البيانات من الحدث.

الإعدادات: خيار للسماح بأي وصول أو وصول محدّد يتم التحكّم فيه من خلال قائمة بمسارات المفاتيح المسموح بها (تتوفّر بنية أحرف البدل).

مطلوبة من قِبل: 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

الاسم المعروض: قراءة البيانات الوصفية للأحداث

الوصف: يتيح هذا الإذن قراءة البيانات الوصفية للحدث في عمليات استدعاء الأحداث.

الإعدادات: لا شيء

مطلوب من قِبل: 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') { ... }

return_response

الاسم المعروض: Returns response

الوصف: يتيح هذا الإذن عرض الردّ على المتصل.

الإعدادات: لا شيء

مطلوب من قِبل: returnResponse

توقيع طلب البحث: queryPermission('return_response')

ملاحظات: لا يتضمّن هذا الإذن أي حقول لتضييق نطاقها، ولا يتم عادةً الاستعلام عنه.

run_container

الاسم المعروض: يتم تشغيل الحاوية

الوصف: تشغيل الحاوية باستخدام حدث

الإعدادات: لا شيء

مطلوب من قِبل: runContainer

توقيع طلب البحث: queryPermission('run_container')

ملاحظات: لا يتضمّن هذا الإذن أي حقول لتضييق نطاقها، ولا يتم عادةً الاستعلام عنه.

send_http

الاسم المعروض: إرسال طلبات HTTP

الوصف: يتم إرسال طلب HTTP إلى عنوان URL محدّد.

مطلوبة من قِبل: getGoogleScript وsendEventToGoogleAnalytics وsendHttpGet وsendHttpRequest

توقيع طلب البحث: queryPermission('send_http', <url>)

ملاحظات: تتحكّم هذه السياسة في إمكانية تقديم طلب HTTP، وذلك استنادًا إلى عنوان URL. لضمان اتصال آمن، يُسمح فقط بعناوين 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);
}

set_cookies

الاسم المعروض: يتم ضبط ملف تعريف ارتباط.

الوصف: يتم ضبط ملف تعريف ارتباط بالاسم والمَعلمات المحدّدَين.

الإعدادات: جدول بأسماء ملفات تعريف الارتباط المسموح بها، ولكل منها قيود اختيارية على الاسم والنطاق والمسار والسمة secure وتاريخ انتهاء الصلاحية.

مطلوب من قِبل: setCookie

توقيع طلب البحث: queryPermission('set_cookies', <name>, <options>)

ملاحظات: تتحكّم هذه السياسة في ما إذا كان يمكن إضافة عنوان "Set-Cookie" معيّن إلى الاستجابة، وذلك حسب اسم ملف تعريف الارتباط والنطاق والمسار والسمة secure وتاريخ انتهاء الصلاحية.

مثال على الرمز

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 لطلب بيانات من Google APIs.

الإعدادات: قائمة بنطاقات Google OAuth 2.0 المسموح بها.

مطلوب من قِبل: getGoogleAuth

توقيع طلب البحث: queryPermission('use_google_credentials', <scopes>)

ملاحظات: يفرض هذا الإعداد قيودًا على نطاقات Google OAuth 2.0 المسموح بها للاستخدام مع Google APIs.

مثال على الرمز

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

user_ip

الاسم المعروض: قراءة عنوان IP الخاص بالمستخدِم

الوصف: يقرأ عنوان IP الخاص بالمستخدِم.

الإعدادات: لا شيء

مطلوب من قِبل: getAnonymizedIpAddress

توقيع طلب البحث: queryPermission('user_ip')

ملاحظات: تتحكّم هذه السياسة في ما إذا كان بإمكان نموذج مخصّص قراءة عنوان IP الخاص بالمستخدم.

مثال على الرمز

const getAnonymizedIpAddress = require('getAnonymizedIpAddress');
const queryPermission = require('queryPermission');

if (queryPermission('user_ip')) {
  return getAnonymizedIpAddress();
}