لضمان أنّ المستخدمين الذين لديهم إذن الوصول إلى عنصر معيّن فقط يمكنهم رؤية هذا العنصر ضمن نتيجة بحث، عليك فهرسة العناصر باستخدام قوائم التحكّم بالوصول (ACL) الخاصة بها من مستودع المؤسسة. يجب تصميم قوائم التحكّم بالوصول الخاصة بمستودعك وتضمينها عند فهرسة العناصر في المستودع. توفّر حزمة تطوير البرامج (SDK) الخاصة بـ Content Connector مجموعة كبيرة من طرق قوائم التحكّم بالوصول (ACL) التي تتميّز بفعالية كافية لتصميم قوائم التحكّم بالوصول الخاصة بمعظم المستودعات.
إنشاء قائمة ACL
يتطلّب إنشاء قائمة التحكّم بالوصول خطوتَين:
- أنشئ
Principal
باستخدام الإجراءات الثابتة في فئة ACL. - استخدِم فئة
Acl.Builder
لإنشاء قائمة التحكّم بالوصول باستخدام الجهة الرئيسية.
يتناول الجزء المتبقي من هذا المستند بعض المفاهيم التي تحتاج إلى معرفتها لتصميم وإنشاء قوائم التحكّم بالوصول، مثل الوراثة والاحتواء.
إنشاء كيان أساسي باستخدام معرّف خارجي
تتطلّب خدمة Google Cloud Search أن يتم ربط المستخدمين والمجموعات بعنوان بريد إلكتروني على Google. عند فهرسة عناصر المستودع، قد لا تتضمّن موصّلات المحتوى عناوين البريد الإلكتروني هذه. ومع ذلك، تتيح لك حزمة تطوير البرامج (SDK) الخاصة بـ "أداة ربط المحتوى" استخدام أي معرّف خارجي (معرّف يمنح مستخدمًا أو مجموعة إذن الوصول إلى عناصر المستودع)، بدلاً من عنوان البريد الإلكتروني، لفهرسة عنصر. استخدِم طريقة
getUserPrincipal()
أو طريقة
getGroupPrincpal()
لإنشاء كيانات أساسية تحتوي على معرّفات خارجية. تتوفّر عدة طرق ثابتة أخرى في فئة ACL
تُستخدَم لإنشاء عناصر Principal
.
اكتساب الأذونات من قائمة التحكم بالوصول
يشير توارث قائمة التحكّم بالوصول إلى إذن الوصول إلى عنصر معيّن ومستخدم معيّن، استنادًا إلى نتيجة الجمع بين قوائم التحكّم بالوصول الخاصة بالعنصر وقوائم التحكّم بالوصول الخاصة بسلسلة التوارث. تعتمد القواعد المستخدَمة لاتخاذ قرار بشأن التفويض على المستودع وخصائص العنصر.
ضبط البيانات الموروثة
يمكن أن يتضمّن كل عنصر جهات أصلية مسموح بها مباشرةً وجهات أصلية مرفوضة مباشرةً،
يتم تحديدها باستخدام الطريقتَين
setReaders()
و
setDeniedReaders()
. المستخدم الأساسي المسموح به بشكل مباشر هو مستخدم تم تحديده في قائمة التحكم بالوصول (ACL) تمنحه إذن الوصول المباشر إلى عنصر معيّن. المستخدم المرفوض بشكل مباشر هو مستخدم تم تحديده في قائمة التحكم بالوصول (ACL) على أنّه لا يملك إذن الوصول إلى عنصر معيّن.
يمكن أن يرث العنصر أيضًا الجهات الرئيسية المسموح بها بشكل غير مباشر والجهات الرئيسية المرفوضة بشكل غير مباشر باستخدام طريقة setInheritFrom()
. الكيان الأساسي المسموح به بشكل غير مباشر هو مستخدم لديه إذن وصول غير مباشر إلى عنصر معيّن من خلال اكتساب إذن الوصول من قائمة التحكّم بالوصول. المستخدم المرفوض بشكل غير مباشر هو مستخدم
يتم رفض وصوله إلى عنصر معيّن من خلال وراثة قائمة التحكم بالوصول.
يوضّح الشكل 1 كيفية استخدام طريقة
setInheritFrom()
لوراثة الجهات الرئيسية المسموح بها بشكل غير مباشر والجهات الرئيسية المرفوضة بشكل غير مباشر.

setInheritFrom()
يتم تمثيل عناصر التحكّم في الوصول هذه في الشكل 1:
- المستخدم 1 هو مستخدم أساسي مسموح به مباشرةً في العنصر A.
- المستخدم 2 هو مستخدم أساسي مسموح به بشكل مباشر للعنصر B.
- يرث العنصر "ب" قائمة التحكّم بالوصول الخاصة بالعنصر "أ".
استنادًا إلى عناصر التحكّم في إمكانية الوصول، تكون قواعد الوصول كما يلي:
- لا يلزم تحديد المستخدم 1 بشكل صريح كجهة أساسية للعنصر B ليكون جهة أساسية مسموحًا بها بشكل غير مباشر للعنصر B، بل يتم اكتساب إذن الوصول لأنّ المستخدم 1 مُدرَج كجهة أساسية مسموحًا بها بشكل مباشر للعنصر A، ويكتسب العنصر B قائمة التحكّم بالوصول من العنصر A.
- المستخدم 2 ليس كيانًا أساسيًا مسموحًا به بشكل غير مباشر للعنصر A.
تحديد نوع البيانات الموروثة
إذا ضبطت عملية التوريث باستخدام الطريقة
setInheritFrom()
،
عليك ضبط نوع التوريث باستخدام الطريقة
setInheritanceType()
. يحدّد نوع الإذن الموروث طريقة دمج قائمة التحكّم بالوصول الخاصة بالعنصر الفرعي مع قائمة التحكّم بالوصول الخاصة بالعنصر الرئيسي. تنفِّذ السمة Acl.InheritanceType
ثلاثة أنواع من الوراثة:
BOTH_PERMIT
: اضبط نوع الإذن علىBOTH_PERMIT
لمنح المستخدم إذن الوصول إلى العنصر فقط عندما تسمح له كل من قائمة التحكّم بالوصول الخاصة بالعنصر الفرعي وقائمة التحكّم بالوصول الخاصة بالعنصر الأصل الموروث بالوصول إلى هذا العنصر.CHILD_OVERRIDE
- اضبط نوع الإذن الموروث علىCHILD_OVERRIDE
لفرض أولوية قائمة التحكّم بالوصول الخاصة بالعنصر الفرعي على قائمة التحكّم بالوصول الخاصة بالعنصر الرئيسي الموروث عندما يحدث تعارض بينهما. لذا، إذا كانت قائمة التحكّم بالوصول للعنصر الأصل ترفض منح المستخدم إذن الوصول بصفته قارئًا مرفوضًا، سيظل بإمكان المستخدم الوصول إلى العنصر إذا كان لديه إذن بالوصول إلى العنصر الفرعي بصفته قارئًا. في المقابل، حتى إذا كانت قائمة التحكّم بالوصول الخاصة بالعنصر الأصل تمنح المستخدم إذن الوصول، لن يتمكّن المستخدم من الوصول إذا كان لديه إذن قراءة مرفوض للعنصر الفرعي.PARENT_OVERRIDE
: اضبط نوع الإذن الموروث علىPARENT_OVERRIDE
لفرض أولوية قائمة التحكّم بالوصول الخاصة بالعنصر الأصل على قائمة التحكّم بالوصول الخاصة بالعنصر الفرعي عندما تتعارض القائمتان. لذلك، إذا كانت قائمة التحكّم بالوصول الخاصة بالعنصر الفرعي تمنع المستخدم من الوصول إليه كقارئ مرفوض، سيظل بإمكان المستخدم الوصول إلى العنصر إذا كان بإمكانه الوصول إلى العنصر الرئيسي كقارئ. في المقابل، حتى إذا كانت قائمة التحكّم بالوصول الخاصة بالعنصر الفرعي تمنح المستخدم إذن الوصول، لن يتمكّن المستخدم من الوصول إليه إذا كان من القراء المحظورين للعنصر الرئيسي.
عند تقييم سلسلة توريث قائمة التحكّم بالوصول، يمكن أن يؤدي ترتيب التقييم إلى تغيير نتيجة قرار التفويض. توفّر خدمة Cloud Search ترتيب التقييم من العنصر الفرعي إلى العنصر الرئيسي لسلاسل وراثة قوائم التحكم بالوصول. على وجه التحديد، يبدأ قرار قائمة التحكّم بالوصول (ACL) لسلسلة بتقييم عنصر فرعي مع العناصر الأصلية، ويمكن أن يتطوّر إلى أن يصل إلى العنصر الأصلي الأساسي.
على سبيل المثال، إذا كان الطفل لديه نوع إذن CHILD_OVERRIDE
وكان لدى المستخدم إذن الوصول إلى الطفل، لن يحتاج Drive إلى تقييم الوالد.
ومع ذلك، إذا كان لدى الطفل إذن PARENT_OVERRIDE أو BOTH_PERMIT، سيواصل Drive تقييم الإذن الموروث في أعلى سلسلة الإذن.
الحاويات وحذف العناصر
عند فهرسة عنصر، يمكنك تصنيفه كحاوية باستخدام طريقة
setContainer()
التابعة لفئة
IndexingItemBuilder
. تحدّد العلاقة بين الحاوية والعنصر الذي تحتوي عليه التسلسل الهرمي المادي للعناصر وتضمن حذف العناصر بشكل صحيح.
عند حذف حاوية، يتم حذف العناصر التي تحتويها أيضًا.
علاقات الاحتواء مستقلة تمامًا عن قواعد اكتساب الأذونات من قائمة التحكّم بالوصول. على سبيل المثال، يمكن أن يحتوي مجلد على ملف في نظام ملفات بغرض الحذف، ولكن يمكن أن يرث قائمة التحكّم بالوصول من مجلد مختلف. لا يؤدي حذف مجلد إلى حذف العناصر التي تستخدم قائمة التحكّم بالوصول الخاصة به، ما لم تكن هذه العناصر أيضًا في التسلسل الهرمي الخاص بالمجلد.
يتم تمثيل عناصر التحكّم في الوصول هذه في الشكل 2:
- المستخدم 1 هو مستخدم أساسي مسموح به مباشرةً في العنصر A.
- المستخدم 2 هو مستخدم أساسي مسموح به بشكل مباشر للعنصر B.
- المستخدم 3 هو مستخدم أساسي مسموح به بشكل مباشر للعنصر C.
- يرث العنصر C قائمة التحكم في الوصول الخاصة بالعنصر A.
- تحدّد السلعة "ب" السلعة "أ" كحاوية لها.
- تحدّد السلعة C اسم السلعة B كحاوية لها.
استنادًا إلى عناصر التحكّم في إمكانية الوصول، تكون قواعد الوصول كما يلي:
- يأتي الوصول غير المباشر من طريقة
setInheritFrom()
. وبالتالي، يمكن للمستخدم 1 الوصول إلى العنصر C لأنّ العنصر C يرث قائمة التحكّم بالوصول الخاصة بالعنصر A. - لا يأتي إذن الوصول غير المباشر من احتواء العنصر B على العنصر C. وبالتالي، لا يمكن للمستخدم 2 الوصول إلى العنصر C.

setInheritFrom()
طريقة الدفع المستخدَمة.يتيح لك فصل اكتساب قائمة التحكّم بالوصول عن التسلسل الهرمي للاحتواء تصميم العديد من البُنى الحالية المختلفة.
عند حذف عنصر بنجاح:
- أي عنصر كان يتضمّن عنصرًا محذوفًا يصبح غير قابل للبحث ويتم تحديد موعد لحذفه من مصدر بيانات Google.
- أي عنصر حدّد العنصر المحذوف باستخدام الطريقة
setInheritFrom()
سيصبح غير قابل للبحث.
إذا كان أحد المراجع يتضمّن عنصرًا محذوفًا باستخدام طريقة
setInheritFrom()
، ولكنّه لا يتضمّن حاوية تم ضبطها باستخدام
setContainer()
، أو إذا كان التسلسل الهرمي للاحتواء لا يتضمّن أي عناصر محذوفة، سيبقى هذا العنصر وبياناته في مصدر بيانات Google. أنت المسؤول عن حذف العنصر.
يوضّح الشكل 3 مثالاً على كيفية عمل الحذف في التسلسل الهرمي للعناصر.

يتم تمثيل عناصر التحكّم في الوصول هذه في الشكل 3:
- المستخدم 1 هو مستخدم أساسي مسموح به مباشرةً في العنصر A.
- المستخدم 2 هو كيان أساسي مسموح به بشكل مباشر للعنصر D.
- يرث كل من العنصر D والعنصر E قائمة التحكّم بالوصول الخاصة بالعنصر A.
- تحدّد السلعة D اسم السلعة A كحاوية لها.
- العنصران A وE هما عنصران على مستوى الجذر لأنّهما لا يحتويان على عنصر حاوٍ.
يتم حذف الحاويات بشكل متسلسل من خلال مراجع الحاويات. عند حذف العنصر (أ):
- يفقد جميع العناصر الفرعية من مرجع
setInheritFrom()
إذن الوصول لجميع المستخدمين. - لا يمكن لأي مستخدم الوصول إلى العنصر (أ).
- يتم حذف العنصر D ضمنيًا. لا يمكن لأي مستخدم الوصول إلى العنصر D.
- لا يتم حذف العنصر E، لأنّ الحذف يتم فقط من خلال مراجع الحاويات.
- يتعذّر الوصول إلى العنصر E ولا يمكن لأي مستخدم البحث عنه.