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

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

إنشاء قائمة التحكم بالوصول (ACL)

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

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

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

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

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

البيانات الموروثة لقائمة التحكم بالوصول

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

ضبط الإعدادات الموروثة

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الاحتواء وحذف العنصر

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

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

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

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

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

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

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

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

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

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

يوضّح الشكل 3 مثالاً على طريقة الحذف في العرض الهرمي للسلع.

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

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

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

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

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