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