我正在用MVC3構建一個多租戶網站。在這個項目之前,我從來沒有碰過.NET堆棧或一般的Web開發,所以你可以想象我的領域知識有點缺乏。ASP.NET MVC3:我需要使用MembershipProvider嗎?
我仍然使用默認的AccountController體系結構,但我很快就確定我不想使用aspnetdb.mdf進行身份驗證,因爲它的設計與我的要求非常不同。我確實需要基於角色的身份驗證,因此我最終將自定義用戶和角色類編寫爲代碼優先的實體類,並使用this tutorial來設置自定義MembershipProvider和RoleProvider。
目前一切正常,但由於我構建的多租戶功能越來越混亂。根據this example,我使用Controller的自定義擴展來跟蹤哪個租戶正在使用此會話,並且所有控制器都擴展此類而不是基本Controller類。
所有租戶都使用相同的數據庫。每個實體都有一個租戶屬性,用於標識其所屬的用戶。
所以,這裏的問題:
用戶名不必是全球唯一的。只有用戶名和租戶的組合必須是唯一的。因此,ValidateUser需要知道用戶名,密碼和租戶。由於我的自定義MembershipProvider不是控制器,它不知道哪個租戶正在使用該會話,並且ValidateUser方法只接受用戶名和密碼,因此我無法將該信息傳遞給它。
此外,幾乎所有的MembershipProvider的工作除了ValidateUser已經實現在一個UserRepository類,該教程告訴我做的。我非常喜歡Repository模式,它比堅持MembershipProvider的界面更方便,但是現在UserRepository和MembershipProvider之間存在巨大的利益衝突。
所以,我的問題:
我需要使用的MembershipProvider,甚至會籍,在所有?
似乎所有MembershipProvider所做的都會由我的存儲庫類更方便地執行。在這一點上,我所要做的就是編寫一個不依賴於Membership的新Authorize屬性,並且一切都應該在沒有任何MembershipProvider的情況下運行,對吧?如果我不放棄會員資格,我不得不徹底毀掉我的MembershipProvider實現,以至於它幾乎不管原始界面。
...無論是那個或成員做了很多我不知道的東西,並刪除它是公然的愚蠢。這也是一個明顯的可能性。
除了使用或不隸屬的,我建議你使用電子郵件作爲用戶名...如果該電子郵件工程2名房客...登錄後,你可以選擇租客(可顯示企業的標誌,如果每個租戶業務entiyt)。 – Romias 2012-03-13 18:43:31