پیاده سازی فیلتر های سفارشی با Session در Asp.Net.MVC

فیلتر ها ویژگی است که به ما اجازه پیاده سازی منطق در طی مراحل مختلف و اجرای آن با کنترلر را میدهد لذا در این پارت ازآموزش قصد داریم به پیاده سازی یک فیلتر در MVC بپردازیم

فیلتر ها را میتوان به دورش اعمال کرد  یا میتوان در کنترل به عنوان صفت  ویا بالای هر متد از آن استفاده کنیم

چهار نوع فیلتر وجود دارد که هریک از آن ها  با interface قابل پیاده سازی میباشد.

1: فیلتر Authorization با اینترفیس IAuthorizationFilter پیاده سازی میکنیم

2: فیلتر ACtion با اینترفیس IActionFilter قابل پیاده سازی است

3:فیلتر Result با اینترفیس IResultFilter قابل اجرا میباشد

4: فیلترException با  اینترفیس IExceptionFilter قابل اجرا میباشد

در این آموزش قصدداریم  فیلترAuthorization  را با استفاده از Session پیاده سازی کنیم.

در مرحله اول ابتدا یک  فولدر به نام Filter  ایجاد کرده و یک کلاس به نام MyAuthoriztion داخل آن ایجاد میکنیم وهمچنین شما نیاز دارید که از اینترفیس IauthorizonFillter  برای پیاده سازی رویداد OnAuthroization  نیز استفاده کنیم

حال در کنترلر کد های زیر ا اضافه میکنیم

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcAuthorizeDemo.Filters;

namespace MvcAuthorizeDemo.Controllers
{
    public class AccountController : Controller
    {
        //
        // GET: /Account/

        public ActionResult Index()
        {
            return View();
        }


        public ActionResult Login()
        {
            Session["loggedin"] = true;
            return View();
        }

        public ActionResult Logout()
        {
            Session.Abandon();
            return View();
        }

        [MyAuthorization]
        public ActionResult Protected()
        {
            return View();
        }

    }
}

همان طور که مشاهده میکنید یک متغیر ازSesstion به نام  loggedin ایجاد میکنیم سپس در متدlogin برابر با True قرار میدهیم, سپس برای logout کردن از خاصیت  abandon  خود session استفاده میکنیم.

حال به پیاده سازی  کلاس MyAuthorizationمیردازیم

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcAuthorizeDemo.Filters
{
    public class MyAuthorizationAttribute : FilterAttribute, IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            var session = filterContext.HttpContext.Session;
            var isLoggedIn = Convert.ToBoolean(session["loggedin"]);
            if (!isLoggedIn)
            {
                filterContext.Result = new HttpUnauthorizedResult();
            }
        }
    }
}

 

در متد OnAuthorization   ابتدا اطلاعات را از session   میگریم سپس متغییر isLoggedIn   به صورت bool  ذخیره میکنیم

حال در زیر میتوان از کلاس MyAuthorizationبه عنوان یک صفت  در کنترلر Home  استفاده کرد.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcAuthorizeDemo.Filters;

namespace MvcAuthorizeDemo.Controllers
{
    [MyAuthorization]
    public class AccountController : Controller
    {
        //
        // GET: /Account/

        [AllowAnonymous]
        public ActionResult Index()
        {
            return View();
        }

        [AllowAnonymous]
        public ActionResult Login()
        {
            Session["loggedin"] = true;
            return View();
        }

        public ActionResult Logout()
        {
            Session.Abandon();
            return View();
        }
        
        public ActionResult Protected()
        {
            return View();
        }

    }
}

نکته:صفت AllowAnonymous  برای مواقعی استفاده میشود که میخواهید تمام کاربران به آن صفحه دسترسی داشته باشد

فایل های ضمیمه