تصميم إذن
يمثل الإذن إمكانية الوصول إلى مورد محمي أو إجراء عملية محمية. عندما تقوم بتطبيق فئة الإذن الخاصة بك ، يجب عليك اتخاذ عدة قرارات تصميم عالية المستوى. إحدى الخطوات الأولى هي تحديد بدقة ما هو المورد الذي يتم تصميم الإذن المخصص الخاص بك لحمايته.
و تريد بعد ذلك أن تقرر ما إذا كانت هناك أي اهتمامات حول الأذونات المتداخلة. و على الرغم من أنك تريد تجنب الحاجة لوجود إذنين لحماية نفس المورد، إلا أنه في بعض الحالات لا يمكنك تجنب ذلك بشكل معقول. على سبيل المثال، إذن الوصول لتعليمات برمجية غير مُدارة يمكن أن يشتمل على أذونات أخرى، و ذلك لأن التعليمات البرمجية التي يتم منحها إذن الوصول لتعليمات برمجية غير مُدارة يمكنها تنفيذ أي شيء تقريباً عبر واجهة API غير مُدارة. ومع ذلك، عندما لا يتم منح إذن الوصول للتعليمات البرمجية غير المُدارة، فلا زلت بحاجة لمنح أذونات للوصول إلى الموارد الأخرى محددة. و لذلك، فمن المنطقي أن يكون إذن الوصول إلى التعليمات البرمجية غير المُدارة منفصلاً عن الأذونات الأخرى.
كيف يمكنك معرفة ما إذا كان التداخل في تغطية الإذن يمكن إدارته؟ لا يوجد جواب مطلق، و لكن من الأشياء التي يجب عليك التفكير بها هو ما إذا كان أحد الأذونات يمثل وصولاً أكثر تفصيلاً من الآخر بحيث يكون عادةً ممنوحاً بشكل جاهز أكثر من الإذن الآخر. و عندما تكون هذه هي الحالة، فإن منح حقوق الوصول يُعد سهلاً في العديد من الحالات، مما يسهّل مهمة المسؤول.
و بعد ما تقرر أي مورد سيحميه الإذن الخاص بك و بعدما تقوم بحل أية مشاكل متعلقة بتداخل الأذونات الخاصة بك، فيجب أن تقرر مدى الدقة التفصيلية للتحكم بالوصول. و إجابة هذا السؤال يؤثر على طريقة تصميمك للمتغيرات التي تمثل حالة الإذن وتحديد ما إذا كان يمكن للمسؤولين تهيئة الوصول إلى الموارد المحمية. و ذلك قد يؤثر أيضاً على الأداء، و سهولة الاستخدام، والعوامل الأخرى.
و لتوضيح بعض مشكلات التصميم تلك، خذ في الاعتبار عدد قليل من التصميمات التي يمكن اختيارها للفئة FileIOPermission و التي توفرها .NET Framework. يؤثر كل اختيار للتصميم على المتغيرات التي تمثل حالة الإذن.
يعني البت الواحد "استخدام كافة الملفات" أو "عدم استخدام أية ملفات"، وذلك حسب قيمته.
اثنين من وحدات البت تعني "قراءة كافة ملفات" و "كتابة كافة الملفات" ، أو لا، و ذلك حسب قيمتهم.
26 بت تعني "استخدم كافة الملفات على محرك الأقراص المحدد".
مصفوفة من السلسلات النصية تحدد كافة الملفات التي يتم إعطاء الوصول لها.
و من الواضح أن هناك مفاضلات متنوعة يجب أخذها بعين الاعتبار. فعلى سبيل المثال، الإذن ذو البت الواحد بسيط جداً، و سريع، و سهل الفهم، إلا أنه يقدم للمسؤولين الاختيار بين الكل أو لا شئ إطلاقاً، و هو ما قد لا يكون مطلوبًا. الاختيارات الأخرى تحدد تمثيلاً أكثر تعقيداً لحالة الإذن و هو ما قد يبطئ من الأداء إلى درجة ما. يجب عليك المُفاضلة بين هذه الخيارات ثم الوضع في الاعتبار أنه يجب ألا تقوم بإنشاء أكثر من إذن لحماية نفس المورد. و بشكل عام، يجب عليك تصميم فئة الإذن الخاصة بك بحيث تكون حالة الإذن معقدة كما هو ضروري فقط، دون التأثير على الأداء بشكل كبير.
و على الرغم من أن التصميمات الأخرى ممكنة، فإن أغلب الأذونات تتبع أحد أنماط التصميم القياسية التالية أو مجموعة منها:
أذونات القيمة المنطقية (Boolean). النوع الأبسط من كائنات الإذن التي تحتفظ بقيمة بت واحدة أو أكثر، و التي تقابل كل واحدة منها "الإذن للقيام بـ X". إما أن يكون لديك الإذن أو لا. و كمثال على هذا النوع من الإذن فئة SecurityPermission، والتي تحتوي الحالة الخاصة به على متغيرات قيمة منطقية تمثل الحق في إجراء أشياء مختلفة مثل إذن طلب استدعاء تعليمات برمجية غير مُدارة، كل منها إما يكون مسموحاً به أو لا.
مستويات الأذونات. و يحتوي هذا النموذج الأكثر تفصيلاً من الإذن على متغيرات تمثل كل نوع من الوصول كرقم من صفر (بمعنى لا وصول إطلاقاً) إلى رقم ما أعلى منه (و ذلك يعنى وصول غير مقيد على الإطلاق)، مع عدد من المستويات فيما بينهما. فعلى سبيل المثال، يمكنك استخدام فئة UIPermission للتعبير عن المستويات المختلفة من أذونات استخدام النوافذ، بدءاً من عدم وجود إذن لواجهة الاستخدام إلى إذن واجهة الاستخدام غير المقيد، مع بعض التدرجات فيما بينهما.
أذونات قائمة الكائنات. هذا النوع من الأذونات يوفر مواصفات مفصّلة جداً عن ما هو مسموح به و ما هو غير مسموح به. فئة FileIOPermission تُعد مثالاً جيداً لهذا النوع من الإذن لأنه يتم تمثيل حالته بقوائم للملفات التي يتم السماح بأنواع معينة من الوصول إليها. الأذونات التي تعتمد على القوائم تكون أكثر فائدة في حماية الموارد التي تحتوي على عدد كبير من الكائنات المسماة.
و بوجه عام، من الجيد تقليل الاعتماد على تجميعات خارجية في فئة الإذن الخاصة بك و ذلك لأن كل تجميع يعتمد عليه الإذن الخاص بك يجب تحميله عندما يحتاج نظام الأمان لفئة الإذن الخاصة بك. و إذا كان الأمر ممكناً، يجب وضع الأذونات المخصصة الخاصة بك و أية فئات سمة مقترنة بها في تجميع منفصل لتقليل احتمال أن يتم تحميل تجميعات أخرى غير ضرورية .