عوامل تصفية الأمان لاقتطاع النتائج في البحث المعرفي في Azure
يمكنك تطبيق عوامل تصفية الأمان لاقتطاع نتائج البحث في Azure Cognitive Search استنادا إلى هوية المستخدم. تتطلب تجربة البحث هذه عموما مقارنة هوية كل من يطلب البحث بحقل يحتوي على المبادئ التي لديها أذونات للمستند. عند العثور على مطابقة، يكون للمستخدم أو المدير (مثل مجموعة أو دور) حق الوصول إلى هذا المستند.
تتمثل إحدى طرق تحقيق التصفية الأمنية في فصل معقد بين تعبيرات المساواة: على سبيل المثال ، Id eq 'id1' or Id eq 'id2'وما إلى ذلك. هذا النهج عرضة للخطأ ، ويصعب الحفاظ عليه ، وفي الحالات التي تحتوي فيها القائمة على مئات أو آلاف القيم ، يبطئ وقت استجابة الاستعلام بعدة ثوان.
نهج أبسط وأسرع هو من خلال وظيفة search.in . إذا كنت تستخدم search.in(Id, 'id1, id2, ...') بدلا من تعبير المساواة، يمكنك توقع أوقات استجابة دون الثانية.
توضح لك هذه المقالة كيفية إنجاز تصفية الأمان باستخدام الخطوات التالية:
- إنشاء حقل يحتوي على المعرفات الرئيسية
- دفع المستندات الموجودة أو تحديثها باستخدام المعرفات الرئيسية ذات الصلة
- إصدار طلب بحث باستخدام
search.infilter
ملاحظة
ولا تغطي هذه الوثيقة عملية استرجاع المعرفات الرئيسية. يجب أن تحصل عليه من مزود خدمة الهوية الخاص بك.
المتطلبات الأساسية
تفترض هذه المقالة أن لديك اشتراك Azureخدمة البحث anAzure المعرفيوفهرس.
إنشاء حقل أمان
يجب أن تتضمن مستنداتك حقلا يحدد المجموعات التي يمكنها الوصول. تصبح هذه المعلومات معايير التصفية التي يتم على أساسها تحديد المستندات أو رفضها من مجموعة النتائج التي يتم إرجاعها إلى جهة الإصدار. لنفترض أن لدينا فهرسا للملفات الآمنة ، ويمكن الوصول إلى كل ملف بواسطة مجموعة مختلفة من المستخدمين.
إضافة حقل
group_ids(يمكنك اختيار أي اسم هنا) كCollection(Edm.String). تأكد من تعيين سمة إلى الحقلfilterableبحيث تتم تصفية نتائج البحث استنادا إلىtrueحق الوصول الذي يتمتع به المستخدم. على سبيل المثال، إذا قمت بتعيين الحقلgroup_idsإلى المستند الذي يحتويfile_nameعلى "secured_file_b"، فلن يتمكن سوى المستخدمين الذين ينتمون إلى معرفات المجموعة "group_id1" أو "group_id2" من الوصول إلى["group_id1, group_id2"]الملف للقراءة.تأكد من تعيين سمة الحقل
retrievableبحيثfalseلا يتم إرجاعها كجزء من طلب البحث.file_idأضف أيضا والحقولfile_nameمن أجل هذا المثال.{ "name": "securedfiles", "fields": [ {"name": "file_id", "type": "Edm.String", "key": true, "searchable": false, "sortable": false, "facetable": false}, {"name": "file_name", "type": "Edm.String"}, {"name": "group_ids", "type": "Collection(Edm.String)", "filterable": true, "retrievable": false} ] }
دفع البيانات إلى الفهرس الخاص بك باستخدام واجهة برمجة تطبيقات REST
إصدار طلب HTTP POST إلى نقطة نهاية عنوان URL للفهرس. النص الأساسي لطلب HTTP هو كائن JSON يحتوي على المستندات المراد إضافتها:
POST https://[search service].search.windows.net/indexes/securedfiles/docs/index?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]
في نص الطلب، حدد محتوى مستنداتك:
{
"value": [
{
"@search.action": "upload",
"file_id": "1",
"file_name": "secured_file_a",
"group_ids": ["group_id1"]
},
{
"@search.action": "upload",
"file_id": "2",
"file_name": "secured_file_b",
"group_ids": ["group_id1", "group_id2"]
},
{
"@search.action": "upload",
"file_id": "3",
"file_name": "secured_file_c",
"group_ids": ["group_id5", "group_id6"]
}
]
}
إذا كنت بحاجة إلى تحديث مستند موجود بقائمة المجموعات، فيمكنك استخدام merge الإجراء أو mergeOrUpload ما يلي:
{
"value": [
{
"@search.action": "mergeOrUpload",
"file_id": "3",
"group_ids": ["group_id7", "group_id8", "group_id9"]
}
]
}
للحصول على التفاصيل الكاملة حول إضافة المستندات أو تحديثها، يمكنك قراءة تحرير المستندات.
تطبيق عامل تصفية الأمان
من أجل قص المستندات استنادا group_ids إلى الوصول ، يجب عليك إصدار استعلام بحث باستخدام group_ids/any(g:search.in(g, 'group_id1, group_id2,...')) عامل تصفية ، حيث "group_id1 ، group_id2,..." هي المجموعات التي ينتمي إليها مصدر طلب البحث.
يطابق عامل التصفية هذا جميع المستندات التي يحتوي الحقل group_ids على أحد المعرفات المحددة لها.
للحصول على التفاصيل الكاملة حول البحث في المستندات باستخدام Azure Cognitive Search، يمكنك قراءة البحث في المستندات.
لاحظ أن هذا النموذج يوضح كيفية البحث في المستندات باستخدام طلب POST.
إصدار طلب HTTP POST:
POST https://[service name].search.windows.net/indexes/securedfiles/docs/search?api-version=2020-06-30
Content-Type: application/json
api-key: [admin or query key]
حدد عامل التصفية في نص الطلب:
{
"filter":"group_ids/any(g:search.in(g, 'group_id1, group_id2'))"
}
يجب أن تحصل على المستندات مرة أخرى حيث group_ids تحتوي إما على "group_id1" أو "group_id2". بمعنى آخر ، يمكنك الحصول على المستندات التي يمكن لمصدر الطلب الوصول إليها للقراءة.
{
[
{
"@search.score":1.0,
"file_id":"1",
"file_name":"secured_file_a",
},
{
"@search.score":1.0,
"file_id":"2",
"file_name":"secured_file_b"
}
]
}
الخطوات التالية
وصفت هذه المقالة نمطا لتصفية النتائج استنادا إلى هوية المستخدم والدالة search.in() . يمكنك استخدام هذه الوظيفة لتمرير المعرفات من حيث المبدأ للمستخدم الطالب لمطابقتها مع المعرفات الرئيسية المرتبطة بكل مستند مستهدف. عند معالجة طلب بحث، search.in تقوم الوظيفة بتصفية نتائج البحث التي لا يتمتع أي من مديري المستخدم بحق الوصول للقراءة فيها. يمكن أن تمثل المعرفات الرئيسية أشياء مثل مجموعات الأمان أو الأدوار أو حتى هوية المستخدم الخاصة.
للحصول على نمط بديل يستند إلى Active Directory، أو لإعادة النظر في ميزات الأمان الأخرى، راجع الارتباطات التالية.