MVC框架的開發網站的利器,MVC框架也開始越來越流行了。對於.NET ,微軟也發布了MVC框架,做網站通常要涉及到用戶的權限管理,對於.NET MVC 框架的用戶權限管理又應該怎樣設置呢?下面通過示例講解一下怎樣實現.NET MVC 用戶權限管理。
查看微軟MSDN庫我們知道,ASP.NET MVC權限控制都是通過實現AuthorizeAttribute類的OnAuthorization方法。因此我們需要將一個類來繼承AuthorizeAttribute類,並實現OnAuthorization方法。如下面的代碼我們建一個CustomAuthorizeAttribute類
[cce_cs]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
///
/// Summary description for CustomAuthorizeAttribute
///
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
bool isAuthenticated=HttpContext.Current.Session["User"]==null?false:true;
if (!isAuthenticated)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "account", action = "login", returnUrl = filterContext.HttpContext.Request.Url, returnMessage = "您無權查看." }));
return;
}
base.OnAuthorization(filterContext);
}
}
[/cce_cs]
上面的代碼假設用戶登錄的標識是存儲Session中,key為USer,這樣通過判斷是否有這個標識作為是否登錄的判斷,當然這裡的用戶登錄標識只是示例,你完全可以根據自己的方法實現isAuthenticated的登錄判斷。如果沒有登錄,上面的代碼會重定向到登錄頁面。
因此我們現在有了CustomAuthorizeAttribute標簽,只需要給我們的Action方法打上[CustomAuthorizeAttribute] 標簽就可以了,如下面的代碼:
[cce_cs]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace SampleMVCWebsite.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
[CustomAuthorize]
public ActionResult Index()
{
return View();
}
}
}
[/cce_cs]
這樣上面的代碼就會有這樣的效果:當訪問 HomeController 的 Index 方法的時候就會首先執行 CustomAuthorizeAttribute 類中的
OnAuthorization判斷是否登錄,如果沒有就跳到登錄頁面。
像上面這種方式是比較粗粒度的解決方案,由於是已經將定義好權限的固定代碼帶對應的Action上,所以無法實現用戶自定義權限控制。下一次教程講解.NET MVC基於角色的權限控制系統。