تشغيل كل من تصفية تخويل وتصفية العمل على طلب ASP.NET MVC مصادق
-
20-09-2019 - |
سؤال
ولقد زينت تحكم قاعدة بلدي مع اثنين من المرشحات العمل. أنها تعمل بشكل جيد.
واحدة من تلك المجموعات مرشحات يصل الطلب - يفعل أشياء مثل مجموعة الثقافة على أساس المجال، الخ
وأنا أيضا لديها عدد قليل من الإجراءات التي تتطلب الإذن باستخدام السمة تخويل.
ومشكلتي هي أنه عندما محاولات المستخدم لطلب الصفحة غير مسموح لهم الوصول، وركلات مرشح إذن في وتوجيههم إلى صفحة نقول لهم أنهم لا يمكن أن تتنافس الصفحة.
والمسألة هي ان المرشحات العمل أبدا تشغيل حتى يتم تعيين الثقافة وغيرها من البيانات طلب أبدا. هذا يؤدي على نحو فعال اللغة لتكون خاطئة في طريقة العرض وغيرها من البيانات ليكون في عداد المفقودين.
وأنا أعلم أن المرشحات ترخيص تشغيل البداية ولكن سؤالي هو: كيف يمكنني تصميم هذا بحيث يمكنني التأكد من أن بعض الأساليب التي تدار دائما قبل يتم إرجاع طريقة العرض، بغض النظر عن تفويض
.وعلى أمل أن من المنطقي.
المحلول
ووفقا لهذا الوثائق (تحت رأس بحث الترتيب)، مرشحات ترخيص تشغيل دائما قبل المرشحات العمل. وهذا يعني أن العبث مع خصائص Order
لن يساعد.
وأعتقد أن أفضل طريقة للتعامل مع هذا هو لكتابة السمة التفويض الخاصة بك (من شاء subclasses ترث AuthorizeAttribute
وتجاوز AuthorizeCore
) وتشغيل المرشحات العمل يدويا عندما يفشل ترخيص.
نصائح أخرى
وانظر على أمر الإعدام الصادر بحق العمل الفلاتر في MSDN المادة على تصفية العمل
وفي الأساس، يمكنك توفير خاصية Order
على هذه الفلاتر الثقافة بحيث يتم تشغيله <م> قبل م> مرشح التفويض، شيء من هذا القبيل:
[CultureRedirect(Order = 1)]
public class MyBaseController : Controller { }
[Authorize(Order = 2)]
public class RequiresAuth : MyBaseController { }
...
إذا فشل ذلك، لا يزال بإمكانك على تنفيذ كود bfore هذا العمل ينفذ وقبل أي ActionFilter سوف ينفذ.