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

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


كل إذن هو:

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

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

  • write

<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')

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

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

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

الاسم المعروض: لعرض الاستجابة

الوصف: عرض الردّ على المتصل

الإعداد: لا يوجد

الجهة التي طلبت إجراء ذلك: 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

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

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

الإعداد: جدول بأسماء ملفات تعريف الارتباط المسموح بها، ولكل منها قيود optional على الاسم والنطاق والمسار وسمة 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);
}