2

我需要能夠收緊我的業務層 - 訪問特定數據。 用戶界面可以調用業務層並接收用戶定義。然後UI可以調用用戶的.Save(),業務層將調用數據訪問層來保存用戶。在n層架構中的身份驗證和授權

雖然,這裏的問題是,我不只是想讓任何用戶能夠接收一個userdetail並調用具有「admin」角色的僅保存認證用戶。我將如何在業務層/用戶界面中進行認證/授權,以便實現這一目標?

我爲我的用戶界面使用了ASP.NET,並且已經讀入成員資格/角色提供者,但這似乎只是針對實際的用戶界面。我需要在業務層保護它,因爲將來可能會有幾個不同的用戶界面。例如窗體窗體和Asp.net。

想法和建議表示讚賞。

謝謝。

+0

你如何在你的層之間進行溝通? WCF,.net遠程處理,Web服務? – 2010-07-19 18:42:01

+0

類庫參考,但在未來這可能會改變 – Mike 2010-07-19 23:51:16

回答

0

ASP.NET角色/成員資格提供程序包括可以重複使用的存儲和代碼級別組件 - 它們不僅僅是UI。

對於細粒度的訪問控制(例如對頁面上的特定功能),可以使用企業庫。您將能夠重新使用代碼來保護BL層和UI層的功能。

你最想要的鏈接是這個:Determining Whether a User Is Authorized to Perform a Task

另見:

在EntLibs的早期版本中,授權經理是一個關鍵組成部分,但在更新的版本中這不是一個堅定的要求,相反,您可以使用AuthorizationRuleProvider。 參見:Developing Applications Using Windows Authorization Manager

根據數據的複雜程度,數量和性能需求,過濾數據有點麻煩。

  • 一種策略是讓一個簡單的DAL返回所有內容,並刪除當前用戶不允許在BL中看到的數據。
  • 設計一個DAL,其中包含您的應用程序使用的角色的一些知識: DAL.GetCustomersForAdmin()DAL.GetCustomersForMember()但是這會有點危險,因爲您將被綁定到使用這些角色。
  • 有一個數據庫/ DAL就是安全意識,只有總是返回允許用戶看到的數據,通過同樣的方法:DAL.GetCustomers()
+0

我認爲這是我想要的。它看起來很複雜,雖然 – Mike 2010-07-19 01:11:52

+0

許多事情從外面看起來都很複雜 - 但是一旦你進入就不會那麼糟糕;一旦你達到了速度,你可以在任何地方重新使用它 - 第一次可能會很慢,但次要的使用會更快。 – 2010-07-19 01:58:42

+0

有了大量的數據,理論上第一個策略在理論上需要花費更長時間才能進行數據庫轉移,正如你所說的第二個策略是我不喜歡的東西,但是如何實現第三個策略,一個所有用戶設置的數據庫? 對於第四種策略,BL知道用戶訪問權限,並使用DAL僅獲取用戶有權訪問的數據,情況如何?第一和第二策略之間的變體? – jonas 2014-09-01 08:48:15

1

你可能想研究(如果在發展的另一種方法。 NET 3.5/4.0)正在使用Windows Identity Foundation

如果你有興趣在你的網站之外保留你的授權邏輯(我假設你會這樣做,如果你期望使用來自多個前端的業務層),我肯定會推薦看看WIF。您還可以使用ADFS v2.0(這是Windows Server 2008 R2中的服務器角色)與Active Directory集成。

模式&實踐已經發布了guide這對挖掘該主題非常有用。