سؤال

حاليا أستخدم [أذن (أدوار = ".....") لتأمين إجراءات تحكم الخاصة بي على تطبيق ASP.NET MVC 1، وهذا يعمل بشكل جيد. ومع ذلك، يجب أن يكون لآراء البحث معينة أزرار توجيه هذه الإجراءات التي تحتاج إلى تمكين / تعطيلها بناء على السجل المحدد في قائمة البحث، وكذلك المحافظين الأمنية للمستخدم تسجيل الدخول.

لذلك أعتقد أنني بحاجة إلى الحصول على فئة تصل إلى جدول DB الذي يشير إلى مراجع هذه المراقب / الإجراءات المستهدفة مع أدوار التطبيق لتحديد حالة هذه الأزرار. من الواضح ذلك، من الواضح أن تجعل الأمور فوضوي حيث ستحتاج المحافظون إلى الحفاظ عليها في مكانين - في جدول الفئة / ديسيبل وأيضا على إجراءات التحكم (Plus، إذا كنت ترغب في تغيير الوصول إلى الإجراء، سأضطر إلى تغيير رمز وتجميع بدلا من مجرد تغيير إدخال جدول DB).

من الناحية المثالية، أود تمديد وظائف [تفويض] بحيث تكون بدلا من الاضطرار إلى تحديد الأدوار في التعليمات البرمجية [تفويض]، وسوف يستعلم من فئة الأمان بناء على المستخدم والتحكم والإجراءات وستحدث بعد ذلك السماح باللغة الأصلية حرمان الوصول. هل هناك أي مقالات جيدة حول هذا - لا أستطيع أن أتخيل أنها شيء غير عادي تريد أن تفعله، لكنني يبدو أنني تكافح للعثور على أي شيء حول كيفية القيام بذلك (قد يكون الدماغ صباح الاثنين). لقد بدأت بعض الكود في القيام بذلك، والنظر في المادة http://schotime.net/blog/index.php/2009/02/17/custom-Authorization-with-aspnet-mvc/ ويبدو أن يبدأ تشغيل موافق ولكن لا يمكنني العثور على طريقة "صحيحة" للحصول على وحدة تحكم الاتصال وقيم العمل من HTTPCONTEXT - ربما يمكن أن أقنع قليلا من التعليمات البرمجية لاستخراجها من عنوان URL للطلب، ولكن ذلك لا يبدو صحيحا وأنا أفضل أن أفعل ذلك بشكل صحيح.

هتافات

mh.

هل كانت مفيدة؟

المحلول

لقد وجدت هذا في منتدى آخر، وكذلك نشره هنا في حالة العثور عليه من المفيد. لاحظ أن كيفية إجراء هذه التغييرات اعتمادا على ما إذا كنت تستخدم MVC 1 أو 2

تحتاج الفئة التي تنشئها إلى تنفيذها

public void OnAuthorization(AuthorizationContext filterContext)

ثم يمكنك استخدام

string controllerName = filterContext.RouteData.Values["controller"].ToString();

ونفس الشيء، استبدال "العمل" ل "وحدة التحكم" (تأكد من التحقق من وجود خيال في هذه القيم أولا). في MVC 2، يمكن تغيير ذلك إلى FilterContext.actionDescriptor.ActionName و .actiondescriptor.controlldescriptor.controllername ولن تضطر إلى التحقق من خيال

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top