2013-04-25 75 views
0

我想要求所有用戶在進入需要身份驗證的網站的任何部分之前填寫一些其他信息。MVC4攔截需要身份驗證的所有請求

如果有可能,我想捉對[Authorize]註解,但忽略任何@User.IsInRole("something")

有沒有我可以在Global.asax或覆蓋的方法?

我只希望抓住註釋,因爲我只用於.IsInRole()是向他們顯示不同的信息,我想要那裏的鏈接,所以他們實際上看到什麼是需要註釋。希望這是有道理的(有點厭倦)。

回答

0

您可以覆蓋AuthorizeAttribute本身;這會讓您訪問OnActionExecuting()方法,該方法在標有[Authorize]標記的操作被調用時被觸發。從那裏你可以添加你自己的認證邏輯或者調用基本方法,然後重定向到適當的錯誤或者表單,如果額外的數據需要填寫的話。你應該能夠將它們的原始請求作爲返回URL查詢參數,以便用戶可以在一旦額外的數據被照顧後繼續到他們去的地方。然後,您需要用此自定義屬性替換[Authorize]的所有用途,但查找和替換應該注意這一點。

+0

我實際上已經實現了我自己的'[Auth()]'屬性。不過,我希望確保如果有其他人進行了開發(或者我忘記了),那麼在全球範圍內有一些東西可以捕捉到錯誤。 – Jared 2013-04-25 13:47:30

+0

從安全角度來看,我們通常會採用並且稍微好一點的方法是顛倒屬性。這樣你就不需要在需要認證的控制器上指定它,但是在那些不需要認證的控制器上。這樣,開發者不需要記住,並且如果他們嘗試訪問某些內容並且無法訪問,就會發現速度非常快。 – Jakub 2013-04-26 09:21:03