2013-08-25 112 views
0

我想實現一個重定向的未授權用戶,並檢查正確的屬性。爲此,我使用不帶參數的構造函數創建一個類屬性。授權檢查的屬性

[AttributeUsage(AttributeTargets.Method)] 
public class LoggedAttribute:Attribute 
{ 
    public LoggedAttribute() 
    { 
     //TODO 
    } 
} 

現在將此屬性分配給需要授權的所有操作方法。

[Logged] 
    public ViewResult SendMessage() 
    { 
     return View(); 
    } 

我有一個用戶模型與布爾標誌IsLoggedIn。如何在類屬性中檢查此標誌以便在發出標誌的情況下將用戶重定向到認證頁面?

+0

你不想用內置的''Authorize'' attri弼? – hjavaher

+0

無法理解,爲什麼你需要這個。爲什麼不直接使用此授權書的[授權]屬性? –

+0

我想使用我的屬性。 –

回答

1

在使用自定義授權的情況下,屬性如下圖所示:

public class AuthorizeUserAttribute : AuthorizeAttribute 
{  
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var isAuthorized = base.AuthorizeCore(httpContext); 
     if (!isAuthorized) 
     {     
      //anything else you'd like to do like log it 
      return false; 
     } 
    } 
} 

,然後您可以通過以下重寫他們重定向:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
    //disable the redirect 
    if(disabled) 
    { 
     //do something else 
    }else{ 
    filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary(
        new 
         { 
          controller = "Account", 
          action = "Login" 
         }) 
       ); 
    } 
} 

UPDATE:,你使用它像這個:

[AuthorizeUser] 
public ActionResult myAction() 
{ 
    return View(); 
} 
+0

我怎樣才能將真正的價值設定爲isAuthorized簡單的方式? –

+0

對不起,請您詳細說明一下。我不明白你的問題。 – hjavaher

+0

當用戶認證 - 如何通過最小的代碼寫入禁用重定向? –