2011-04-14 47 views
14

您好我想實現一個自定義的授權過濾ASP.NET個IAuthorizationFilter OnAuthorization

//The Authourization attribute on a controller 
public class CustomAdminAuthorizationFilter : IAuthorizationFilter 
{ 
    private readonly IAuthentication _authentication; 

    public SageAdminAuthorizationFilter(IAuthentication authentication) 
    { 
     _authentication = authentication; 
    } 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     bool result = _authentication.Authorize(filterContext.HttpContext); 
    } 
} 

正如你可以在OnAuthorization我得到一個結果是假的真見。 我需要設置什麼來返回我從哪裏來?

編輯:

它似乎仍然直扔我在日誌中

我注入IAuthetication

this.BindFilter<CustomAdminAuthorizationFilter>(FilterScope.Controller, 0); 
    Bind<IAuthentication>().To<CustomAuthenticationService>(); 

然後我裝飾我的動作在控制器等等。

[Authorize] 
    public ActionResult Index() 
    { 
     ViewBag.Title = "Welcome"; 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     return View(); 
    } 

在使用

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

我的web.config林如果有這樣的改變?

任何幫助將不勝感激。

+0

這個回答你的問題? – hunter 2011-11-29 14:00:28

回答

16

變化是一個Attribute,不是簡單的一個IAuthorizationFilter

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
public class SageAdminAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter 
{ 
    readonly IAuthentication _authentication; 

    public SageAdminAuthorizeAttribute(IAuthentication authentication) 
    { 
     _authentication = authentication; 
    } 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (!_authentication.Authorize(filterContext.HttpContext)) 
      filterContext.Result = new HttpUnauthorizedResult(); 
    } 
} 

而現在,而不是使用[Authorize]使用新[SageAdminAuthorize]屬性

[SageAdminAuthorize] 
public ActionResult Index() 
{ 
    ViewBag.Title = "Welcome"; 
    ViewBag.Message = "Welcome to ASP.NET MVC!"; 

    return View(); 
} 
+0

感謝那種回答我的問題,雖然我已經添加了更多的細節,因爲我總是要登錄屏幕 – 2011-04-14 14:01:39

+0

我用上面的例子來創建一個名爲'Permission'的新屬性。我想使用基於權限的授權而不是角色。那是正確的方法嗎?或者我應該使用其他方式來檢查用戶權限? – Skadoosh 2011-11-18 19:50:02

+0

絕對是一個好方法。您可以按照您選擇的方式確定如何在您的「OnAuthorization」方法中處理授權。 – hunter 2011-11-21 14:12:59

相關問題