[asp.net mvc]簡易的以attribute驗證權限(authorize)

  • 996
  • 0

[asp.net mvc]簡易的以attribute驗證權限(authorize)

首先在專案裡新增一個attributes資料夾,以及一個類別檔

 

然後編輯此attribute類別檔的內容如下:

using System;
using System.Web.Mvc;
using System.Web.Routing;

namespace MyProject.Attributes
{
    public class AdminAuthorizeAttribute : ActionFilterAttribute
    {

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            bool authorized = false;
            string userId = "";
            if (filterContext.HttpContext.Session["AdminUserID"]!=null)
            {
                userId = Convert.ToString(filterContext.HttpContext.Session["AdminUserID"]);
            }
            
            //自訂驗證邏輯:
            //這邊是到db檢查是否存在此user
            if (!string.IsNullOrEmpty(userId))
            {
                dbContext context = new dbContext();
                var userObj = context.GetAdminUserInfo(userId);
                if (userObj != null)
                {
                    authorized = true;
                }
            }
            if (!authorized)
                //驗證失敗則自動導向到指定的controller
                filterContext.Result = new RedirectToRouteResult(
               new RouteValueDictionary
               {
                    { "controller", "Admin" },
                    { "action", "Login" }
               });

        }

    }
}

 

最後在需要管理權限的controller的view加上此attribute即可:
如果使用者不符合權限(例如:不經過登入的流程,而直接打該view的網址,那麼session就會是空的,就會被attribute檢查出來,並重新導向到~/Admin/Login 這個頁面   。

[AdminAuthorize]
public ActionResult Meeting()
{
  
    return View();
}

這篇大概是這樣……

參考資料:
c# - MVC 3 AuthorizeAttribute Redirect with Custom Message - Stack Overflow