2009-09-29 174 views
1

我知道我可以通過應用[Authorize]屬性來阻止未經身份驗證的用戶訪問控制器級別的視圖,並且還可以使用此功能將視圖過濾到單個用戶或角色。然而,我的問題是關於做相反的...有沒有辦法從特定的視圖中拒絕認證的用戶,而不必手動添加檢查,看看他們是否在控制器代碼的開始行中進行身份驗證?如果存在這樣的情況,理想情況下是[未經授權]屬性或等效屬性?ASP.NET MVC 1.0身份驗證

原因是我不希望驗證用戶能夠訪問我正在工作的網站的帳戶創建頁面以及其他資源。我意識到我可以明確地在控制器中檢查它們,但我更願意儘可能地裝飾控制器方法。

謝謝:)

回答

0

您可以編寫自己的授權過濾器。從FilterAttribute繼承並實現IAuthorizationFilter。將其稱爲UnauthorizedAttibute,您將可以像[Authorize]一樣使用它。

聽見您可以閱讀有關過濾器:

http://www.asp.net/LEARN/mvc/tutorial-14-cs.aspx

+0

我已經完成了這個:)非常感謝。 – 2009-09-29 15:28:15

0

一個簡單的方法來實現這一點?只需將動作保留爲untagged,然後開始:

If(Request.IsAuthenticated) 
    // redirect somewhere, or return another view... 
+0

感謝您的迴應。我考慮過這樣做,但選擇遵循上面的LukLed的建議。 – 2009-09-29 15:29:06

2

這是一起什麼LukLed線指的是:

public class UnAuthorizedAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     bool excludeCondition = false; 

     if (excludeCondition) 
      filterContext.Result = new HttpUnauthorizedResult(); 
     else 
      base.OnAuthorization(filterContext); 
    } 


} 

簡單地說在邏輯您excludeCondition。你也可以選擇做一些事情,比如重定向到其他視圖。只需用[未經授權]

+0

非常感謝。我會把它作爲我接受的答案,但對LukLed來說這似乎很粗魯。我很欣賞代碼示例:) – 2009-09-29 15:39:04

0

將代碼標記出來,如果您已經在使用角色提供者,也可以簡單地完成這項工作。那麼你的行爲只需要按適當的角色過濾:

[Authorize(Roles = "Admin, Editor")]