قوائم ACL في الخريطة

للتأكد من أن المستخدمين الذين لديهم حق الوصول إلى أحد العناصر هم فقط من يمكنهم رؤية هذا العنصر في نتيجة البحث، عليك فهرسة العناصر باستخدام قوائم التحكم بالوصول (ACLs) الخاصة بها من مستودع المؤسسة. يجب عليك وضع نموذج لقوائم التحكم في الوصول (ACLs) للمستودع لديك وتضمينها عند فهرسة العناصر في المستودع. توفر حزمة تطوير البرامج (SDK) لـ Content Connector مجموعة كبيرة من طرق قائمة التحكم بالوصول (ACL) القوية بما يكفي لإنشاء نماذج لقوائم التحكم في الوصول (ACLs) لمعظم المستودعات.

إنشاء ACL

يمكن إنشاء قائمة التحكم بالوصول (ACL) من خلال عملية من خطوتين:

  1. أنشئ Principal باستخدام الطرق الثابتة في فئة ACL.
  2. استخدِم الفئة Acl.Builder لإنشاء قائمة التحكم بالوصول (ACL) باستخدام العنصر الأساسي.

يتناول الجزء المتبقي من هذا المستند بعض المفاهيم التي تحتاج إلى معرفتها لتصميم وإنشاء قوائم ACL، مثل التوريث والاحتواء.

إنشاء حساب إداري باستخدام معرّف خارجي

يتطلب Google Cloud Search من المستخدمين والمجموعات الانتقال إلى عنوان البريد الإلكتروني لـ Google. عند فهرسة عناصر المستودع، قد لا تحتوي موصلات المحتوى على عناوين البريد الإلكتروني هذه. ومع ذلك، تسمح لك حزمة تطوير البرامج (SDK) لـ Content Connector باستخدام أي معرّف خارجي (رقم تعريف يمنح مستخدمًا أو مجموعة إمكانية الوصول إلى عناصر المستودع)، بدلاً من عنوان بريد إلكتروني لفهرسة أحد العناصر. استخدِم الطريقة getUserPrincipal() أو الطريقة getGroupPrincpal() لإنشاء قيم أساسية تحتوي على معرّفات خارجية. هناك عدة طرق ثابتة أخرى في الفئة ACL تُستخدم لإنشاء كائنات Principal.

اكتساب قوائم التحكم بالوصول (ACL)

يشير توريث قائمة التحكم بالوصول (ACL) إلى التفويض، الخاص بعنصر معين ومستخدم محدد، بناءً على نتيجة تركيبة قوائم التحكم بالوصول (ACLs) للعنصر وقوائم التحكم في الوصول (ACL) لسلسلة الاكتساب الخاصة به. تعتمد القواعد المستخدمة لاتخاذ قرار بشأن التفويض على المستودع وعلى خصائص العنصر.

ضبط الاكتساب

يمكن أن يكون لكل عنصر المبادئ الرئيسية المسموح بها مباشرةً والمبادئ الرئيسية المرفوضة مباشرةً، ويتم تحديدها باستخدام الطريقتَين setReaders() وsetDeniedReaders(). المستخدم الرئيسي المسموح به بشكل مباشر هو مستخدم محدد في ACL يمنحه إمكانية الوصول المباشر إلى عنصر معين. المستخدم الرئيسي الذي يتم رفضه بشكل مباشر هو مستخدم تم تعريفه في قائمة التحكم بالوصول (ACL) بأنه لا يمكنه الوصول إلى عنصر معين.

قد يكتسب العنصر أيضًا المبادئ الرئيسية غير المباشرة المسموح بها والمبادئ الرئيسية المرفوضة غير المباشرة باستخدام الطريقة setInheritFrom(). العنصر الأساسي غير المباشر المسموح به هو المستخدم الذي يمتلك إذن وصول غير مباشر إلى عنصر معيّن من خلال اكتساب قائمة التحكم بالوصول (ACL). العنصر الأساسي غير المباشر الذي تم رفضه هو المستخدم الذي يرفض وصوله إلى عنصر معين من خلال توريث قائمة التحكم بالوصول (ACL).

يوضّح الشكل 1 كيفية استخدام طريقة setInheritFrom() لاكتساب العناصر الرئيسية غير المباشرة المسموح بها وغير المباشرة المرفوضة.

رسم للروابط بين العناصر
الشكل 1. طريقة setInheritFrom():

يتم تمثيل عناصر التحكم في الوصول هذه في الشكل 1:

  • المستخدم 1 هو مدير رئيسي مسموح به بشكل مباشر للعنصر "أ".
  • المستخدم 2 هو مدير رئيسي مسموح به بشكل مباشر للبند ب.
  • يكتسِب العنصر "ب" قائمة التحكم بالوصول (ACL) للعنصر "أ".

استنادًا إلى عناصر التحكّم في الوصول، تكون قواعد الوصول هي:

  • لا يلزم تحديد المستخدم 1 بشكل صريح كعنصر أساسي للعنصر "ب" ليكون أساسيًا مسموحًا به غير مباشر للعنصر "ب"، بل تم اكتساب إمكانية الوصول لأن المستخدم 1 مدرج كعنصر أساسي مباشر مسموح به للعنصر "أ" والعنصر "ب" يكتسب قائمة التحكم بالوصول (ACL) من العنصر "أ".
  • المستخدم 2 ليس مستخدمًا أساسيًا غير مباشر مسموح به للبند أ.

ضبط نوع الاكتساب

في حال ضبط إعدادات الاكتساب باستخدام الطريقة setInheritFrom()، يجب ضبط نوع الاكتساب باستخدام الطريقة setInheritanceType(). يحدد نوع التوريث كيفية دمج قائمة التحكم بالوصول للفرع مع قائمة التحكم في الوصول الخاصة بالمؤسسة الرئيسية. ينفِّذ Acl.InheritanceType ثلاثة أنواع للتوريث:

  • BOTH_PERMIT - ضبط نوع الاكتساب على BOTH_PERMIT لمنح المستخدم إمكانية الوصول إلى العنصر فقط عندما تسمح كل من قائمة التحكم بالوصول (ACL) للعنصر الفرعي وقائمة التحكم بالوصول (ACL) للعنصر الرئيسي بالسماح للمستخدم بالوصول إلى هذا العنصر.

  • CHILD_OVERRIDE - ضبط نوع الاكتساب على CHILD_OVERRIDE لفرض منح الأولوية لقائمة التحكم بالوصول للعنصر الرئيسي عندما يتعارضان. ولذلك، إذا كانت قائمة التحكم بالوصول (ACL) للعنصر الرئيسي تمنع وصول المستخدم كقارئ مرفوض، سيظل بإمكان المستخدم الوصول إذا كان لديه إمكانية الوصول إلى العنصر الفرعي كقارئ. وبالعكس، حتى إذا منحت قائمة التحكم بالوصول (ACL) للعنصر الرئيسي إمكانية الوصول إلى المستخدم، لن يحصل المستخدم على إذن الوصول إذا كان قارئًا مرفوضًا للعنصر الفرعي.

  • PARENT_OVERRIDE - ضبط نوع الاكتساب على PARENT_OVERRIDE لفرض منح الأولوية لقائمة التحكم بالوصول للعنصر الرئيسي عندما يتعارضان. ولذلك، إذا رفضت قائمة التحكم بالوصول (ACL) للعنصر الفرعي وصول المستخدم بصفته قارئًا مرفوضًا، سيظل بإمكان المستخدم الوصول إذا كان لديه إذن بالوصول إلى العنصر الأصلي كقارئ. وبالعكس، حتى إذا منحت قائمة التحكم بالوصول (ACL) للعنصر الفرعي إمكانية الوصول إلى المستخدم، لن يتمكّن المستخدم من الوصول إذا كان قارئًا مرفوضًا للعنصر الأصلي.

عند تقييم سلسلة توريث قائمة التحكم بالوصول، يمكن أن يغير ترتيب التقييم نتيجة قرار التفويض. توفر خدمة Cloud Search ترتيبًا من البداية إلى الجذر للتقييم لسلاسل توريث قوائم التحكم بالوصول (ACL). على وجه التحديد، يبدأ قرار قائمة التحكم بالوصول للسلسلة بتقييم الطفل مع والديه، ويمكن أن يتقدم وصولاً إلى الأصل الجذري.

على سبيل المثال، إذا كان الطفل لديه نوع الاكتساب CHILD_OVERRIDE وكان المستخدم يملك إذن الوصول إلى العنصر الفرعي، لن يحتاج Drive إلى تقييم العنصر الرئيسي. ومع ذلك، إذا كان لدى العنصر الفرعي PARENT_OVERRIDE أو BOTH_PERMIT، يواصل Drive تقييم الوراثة وصولاً إلى السلسلة.

حذف الاحتواء والسلع

عند فهرسة عنصر، يمكنك تصنيفه كحاوية باستخدام طريقة setContainer() للفئة IndexingItemBuilder. تنشئ علاقة الحاوية/الحاوية التسلسل الهرمي المادي للعناصر وتضمن حذف العناصر بشكل صحيح. عند حذف حاوية، يتم حذف العناصر المتضمّنة أيضًا.

علاقات الاحتواء مستقلة تمامًا عن قواعد اكتساب قوائم التحكم بالوصول (ACL). على سبيل المثال، يمكن احتواء ملف في نظام ملفات في مجلد لغرض الحذف، ولكنه يكتسب قائمة التحكم بالوصول (ACL) من مجلد مختلف. لا يؤدي حذف مجلد إلى حذف العناصر التي تكتسب قائمة التحكم بالوصول (ACL)، ما لم تكن هذه العناصر أيضًا في التسلسل الهرمي للاحتواء للمجلد.

يتم تمثيل عناصر التحكم في الوصول هذه في الشكل 2:

  • المستخدم 1 هو مدير رئيسي مسموح به بشكل مباشر للعنصر "أ".
  • المستخدم 2 هو مدير رئيسي مسموح به بشكل مباشر للبند ب.
  • المستخدم 3 هو مدير رئيسي مسموح به بشكل مباشر للبند ج.
  • يكتسِب العنصر "ج" قائمة التحكّم بالوصول (ACL) للعنصر "أ".
  • يسمي العنصر "ب" العنصر "أ" كحاوية له.
  • يسمي العنصر "ج" العنصر "ب" كحاويته.

استنادًا إلى عناصر التحكّم في الوصول، تكون قواعد الوصول هي:

  • يأتي الوصول غير المباشر من الطريقة setInheritFrom(). وبالتالي، يمكن للمستخدم 1 الوصول إلى العنصر "ج" لأن العنصر "ج" يرث قائمة التحكم بالوصول (ACL) للعنصر A.
  • لا تأتي إمكانية الوصول غير المباشر من العنصر C الذي يتضمنه العنصر "ب". لذلك، لا يمكن للمستخدم 2 الوصول إلى العنصر "ج".
رسم للروابط بين العناصر
الشكل 2. طريقة setInheritFrom() قيد الاستخدام.

يتيح لك فصل توريث قائمة التحكم بالوصول عن التسلسل الهرمي للاحتواء وضع نماذج للعديد من الهياكل الموجودة المختلفة.

عند حذف عنصر بنجاح:

  • يتعذّر البحث عن أي عنصر يحتوي على عنصر محذوف، وتمت جدولة حذفه من مصدر بيانات Google.
  • يصبح أي عنصر يحدد العنصر المحذوف باستخدام الطريقة setInheritFrom() غير قابل للبحث.

إذا كان المورد يحتوي على عنصر محذوف باستخدام الطريقة setInheritFrom()، ولكنه لا يحتوي على مجموعة حاوية باستخدام setContainer()، أو لا يحتوي التدرّج الهرمي للاحتواء على أي عناصر محذوفة، سيظل هذا العنصر وبياناته في مصدر بيانات Google. أنت مسؤول عن حذف العنصر.

يوضّح الشكل 3 مثالاً على آلية عمل الحذف في تدرّج هرمي للسلع.

رسم للروابط بين العناصر
الشكل 3. حذف العنصر والبيانات الموروثة لقائمة التحكم بالوصول (ACL).

يتم تمثيل عناصر التحكم في الوصول هذه في الشكل 3:

  • المستخدم 1 هو مدير رئيسي مسموح به بشكل مباشر للعنصر "أ".
  • المستخدم 2 هو مدير رئيسي مسموح به بشكل مباشر للبند د.
  • يرث كل من العنصر "د" والعنصر "هـ" قائمة التحكم بالوصول (ACL) للعنصر "أ".
  • يسمي العنصر "د" العنصر "أ" كحاوية له.
  • العنصران A وE هما عنصران على مستوى الجذر لأنهما لا يحتويان على عنصر حاوية.

لحذف سلسلة من خلال مراجع الحاوية. عند حذف العنصر "أ":

  • يفقد كل المستخدمين التابعين لمرجع setInheritFrom() إمكانية الوصول إلى هذا العنصر لجميع المستخدمين.
  • لا يمكن لأي مستخدم الوصول إلى العنصر "أ".
  • تم حذف العنصر "د" ضمنيًا. لا يمكن لأي مستخدم الوصول إلى العنصر د.
  • لا يتم حذف العنصر "هـ"، لأن الحذف متتالٍ فقط من خلال مراجع الحاوية.
  • يصبح العنصر هـ غير قابل للوصول ولا يتمكن أي مستخدم من البحث عن العنصر هـ.