2011年9月23日 星期五

ASP.NET MVC自訂登入權限

在ASP.NET MVC中
有些Action的執行,必須先判斷使用者是否經過登入,或是有沒有相關權限
所以我們在controller的action名稱前,可加入[Authorize]這個Attribute
若使用者沒有登入,則將他導向Web.config中定義的登入頁
controller的部份


[Authorize]
public ActionResult EditInfo()
{
          
}

Web.config的部份:       

 <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
 </authentication>
   


講到[Authorize]這個Attribute
請先看一下msdn的文件
http://msdn.microsoft.com/zh-tw/library/system.web.mvc.authorizeattribute.aspx
......真的看完了嗎?
再看一次,我會等你的
http://msdn.microsoft.com/zh-tw/library/system.web.mvc.authorizeattribute.aspx
.
.
.
再順便看一下它的source code
http://aspnet.codeplex.com/SourceControl/changeset/view/23011#266447
好,看完了
AuthorizeAttribute它是可以被override的
同時它實作了IAuthorizationFilter介面
因此它必須實作OnAuthorization這個方法
OnAuthorization在判斷授權時,也就是你的action前面加了[Authorize]時,是會被called的

假使你系統的登入規則驗證是有自己一套定義的話
那麼可以override OnAuthorization這個method
例如:

public class YourAuthorizeFilter : AuthorizeAttribute
{
   public override void OnAuthorization(AuthorizationContext filterContext)
     {
        base.OnAuthorization(filterContext);
            
        //可實作你自己的權限存取規則
      }
          
}

這樣一來,在執行action前,只要加了[Authorize]
就會判斷使用者是否有登入或是有沒有該action的權限
若沒有登入或權限,則將它導到預設的頁面。

沒有留言:

張貼留言