2010-03-31 200 views
2

我正在研究一個小MVC框架,我想知道什麼「最好的方法」是結構的東西,所以安全頁面/控制器始終確保用戶登錄(並因此自動重定向到登錄頁面 - 否則 - 如果不是)。顯然,有很多方法可以做到這一點,但我想知道什麼解決方案是最常見的或被認爲是最佳實踐。我有一些想法:MVC頁面,需要用戶登錄

  • 在您的控制器操作方法的開始時顯式調用user->isLoggedIn()? (看起來太容易忘記,並且在事故中留下一個不安全的重要頁面)
  • 讓你的控制器擴展一個secureController,它總是檢查構造函數中的登錄嗎?
  • 當請求安全信息時,是否在模型中檢查? (看起來好像會產生多餘的電話)
  • 完全是另一回事嗎?

注意:我在使用PHP,但問題不是語言相關的。

回答

5

ASP.Net MVC做到這一點很好地與控制器類的[授權]屬性,它需要授權

+0

這也可以應用在每個動作的基礎上。 – mxmissile 2010-03-31 21:35:38

1

這是不這樣做的唯一途徑,但...

所有客戶機請求去一個FilterManager,它根據請求的細節構建一個FilterChain。在FilterChain中,如果資源是需要登錄狀態的資源,並且客戶端未登錄,則可以重定向該請求。原始請求可以保存並重定向到登錄頁面,允許從原始請求繼續(這是可選的)。

這是一個J2EE設計模式,但是一旦你明白了,你可以用任何語言來實現它。在這種情況下,其中一個「過濾器」是「認證過濾器」。請參閱http://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html瞭解這個想法的細節(用Java)。

這樣做的好處是,所有頁面將在FilterManager中集中它們的邏輯,因此一個頁面只需要調用FilterManager。此外,您可以添加調試過濾器/日誌過濾器/等,這可以幫助維護/開發您的代碼。

+0

我很喜歡這個想法。在這一點上,我想把它放到我的(非常小的)框架中,但我一定會仔細研究它。 – keithjgrant 2010-04-01 15:49:06

相關問題