2010-03-27 114 views
3

在我的asp.net mvc應用程序中的問候, 我想要做的是僅在用戶成功授權後才能訪問某些頁面。我已經創建了自定義會員供應商,並且工作正常。我怎麼能在web config中創建這樣的規則 - 例如〜Admin /文件夾中的所有頁面?我不想在每個控制器的動作上創建驗證代碼。 現在我有我的web.config以下語句:asp.net mvc - 限制訪問網頁

<location path="~/Admin"> 
<system.web> 
    <authorization> 
    <deny users="?"/> 
    </authorization> 
</system.web> 

,但它不工作。

回答

2

在配置文件中執行授權邏輯有一個很大的缺點:它不能被輕鬆地進行單元測試,並且如驗證應該被單元測試那麼重要。我建議你爲這件事寫這可能被用來裝飾的所有管理操作的基本控制器需要自定義授權過濾器認證:

[AttributeUsage(
    AttributeTargets.Method | AttributeTargets.Class, 
    Inherited = true 
)] 
public class RequiresAuthenticationAttribute 
    : FilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      filterContext.Result = new RedirectResult(
       string.Format("{0}?ReturnUrl={1}", 
        FormsAuthentication.LoginUrl, 
        filterContext.HttpContext.Request.Url.AbsoluteUri 
       ) 
      ); 
     } 
    } 
} 

而且你的管理控制:

[RequiresAuthentication] 
public class AdminController : Controller 
{ 
    // .. some actions that require authorized access 
} 
+0

爲什麼你使用自定義過濾器而不是開箱即用的「授權」過濾器? – 2010-03-28 20:46:47