[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