سفارشی سازی فیلتر Authorize از ارث بری از AuthorizeAttribute و سپس override کردن متد
public override void OnAuthorization(AuthorizationContext filterContext)
آن شروع میشود. در اینجا به اطلاعاتی مانند
filterContext.ActionDescriptor.ControllerDescriptor.ControllerName
filterContext.ActionDescriptor.ActionName
و خیلی موارد دیگر (آدرس صفحه filterContext.HttpContext.Request.Url تا کاربر filterContext.HttpContext.User و غیره) دسترسی خواهید داشت.
سپس باید طراحی جدیدی را بر اساس ControllerName و ActionName پیاده سازی کنید (یک جدول جدید طراحی کنید) تا این اکشن متدها یا کنترلرها امکان انتساب چندین Role متغیر را داشته باشند.
حالا زمانیکه این فیلتر Authorize سفارشی سازی شده بجای فیلتر Autorize اصلی استفاده میشود، نام اکشن متد و کنترلر جاری را از filterContext دریافت میکنید. سپس این دو مورد به همراه اطلاعات User جاری، پارامترهایی خواهند شد جهت کوئری گرفتن از بانک اطلاعاتی و جدولی که از آن صحبت شد.
در اینجا هر زمانیکه نیاز بود دسترسی کاربری را قطع کنید فقط کافی است نتیجهی این فیلتر سفارشی را به نحو ذیل بازگردانید:
filterContext.Result = new HttpStatusCodeResult(403);
بنابراین در قسمت ادمین، یک صفحهی جدید برای ثبت نام کنترلرها و اکشن متدها به همراه نقشهای پویای آنها خواهید داشت. سپس در این فیلتر Authorize سفارشی، دقیقا مشخص است که اکنون در کدام کنترلر و اکشن متد قرار داریم. بر این اساس (و سایر پارامترهایی که میتوان از filterContext استخراج کرد) یک کوئری گرفته میشود و نقشهای پویای فیلتر Authorize دریافت میشوند. نقشهای کاربر جاری هم که مشخص هستند. اینها را با هم مقایسه میکنید و خروجی 403 را درصورت عدم تطابق، تنظیم خواهید کرد.
ضمنا در صفحهی طراحی انتساب نقشهای متغیر به اکشن متدها یا کنترلرها،
امکان یافتن پویای لیست آنها نیز وجود دارد.