2011-01-26 82 views
0

假設您有一個Business Layer,您將用於前端外部Web應用程序以及後端內部應用程序。外部應用程序將始終在會話中包含用戶的登錄身份/配置文件。後端應用程序僅適用於內部管理員。資源請求驗證,服務或業務層的責任?

在您有以下業務層方法SensitiveInfoManager.GetResource(id)的情況下。你可以想象,當外部用戶調用這個方法時,你需要進行某種驗證,以確保傳入的id實際上屬於請求它的用戶。假設您在數據庫中擁有正確的結構,那麼您將能夠建立從請求用戶到他們請求的資源的鏈接。你也可以想象後端網站管理員應該能夠調用相同的方法,但是該用戶並不與資源相關聯,但是作爲內部管理員的定義應該簡單地能夠請求任何他們想要的資源。

問題是如何以最大限度的重用和最佳的問題分離來實現這一目標?您是否將此驗證納入業務層,在課堂級別設置某種標誌,根據消費者是誰來說明「驗證我」或「不驗證我」。或者,您是否使用Service Layer作爲您的業務層的一部分,通過授權請求的資源進行分配。強制前端應用程序通過服務層請求通道請求,後端應用程序可能直接進入Business Layer

+0

我最初的想法是將此添加爲服務層。但是你能確定所有請求都通過它嗎?如果不將其添加到業務層。將是AOP(面向方面​​編程)的完美人選。 – 2011-01-26 19:57:36

回答

2

我認爲服務層是授權過程最自然的地方。

如果您決定將授權功能添加到業務層,那麼我將創建一個界面IAuthorizationAuthority,其中包含檢查權限的所有功能。我將創建兩個實現此接口的類(一個用於外部應用程序,另一個用於管理應用程序)並使用依賴注入庫,以便您可以決定應用程序級別應使用哪個實現。