有些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的權限
若沒有登入或權限,則將它導到預設的頁面。
沒有留言:
張貼留言