2011-02-10 73 views
10

下午好 - 我今天有一個非常普遍的問題 - 我的任務是創建一個Web應用程序來管理客戶的一些基本信息。這是一個非常簡單的應用程序,但我不知道如何開發網站來支持在他們自己的域或我們網址的子域中的多個用戶?開發多租戶asp.net MVC應用程序時需要記住什麼?

我該如何限制用戶登錄到應用程序的其他部分?

我見過有關Stack Overflow的類似問題中提到的數據庫範圍,有沒有人可以詳細說明這樣的實現的最佳實踐?

MVC3中是否有任何新功能支持多租戶?我面對MVC2和我的電子商務網站這個問題,我們決定我們希望它爲多個店主提供白色標籤和可定製的功能,並且不知道從哪裏開始在現有應用程序中實現這些功能。任何輸入讚賞。

編輯

爲了詳細說明多租戶,我的意思 - 在例如商店的情況下,多個用戶www.mystore.com註冊了自己的店鋪,並分別給予唯一的子域來訪問他們自己的商店實例,位於user1.mystore.com,user2.mystore.com等。每個商店都有客戶訂單歷史記錄,並且這些客戶可以登錄。我需要限制user1.mystore.com的客戶在沒有新帳戶的情況下登錄user2.mystore.com,同樣也要阻止user2.mystore.com訪問user1.mystore.com的客戶歷史記錄。

回答

20
7

很可能您將花費相當多的時間來重構您的數據庫。

第一步是您將創建一個表來容納您的「租戶」列表。然後,您需要將此TenantId添加到系統中的每個表格,以確保沒有人在彼此之間行動。您可以跳過任何本質上具有全局性的表格。一個例子可能是狀態碼列表。

然而,從用戶到他們擁有的數據等等都必須有這個ID。另外,修改所有索引以考慮tenantid。

一旦你有了,你需要修改所有的查詢來考慮tenantid。

租戶表的一列應該是入口網址。像customername.oursite.com或其他。通過這種方式,您可以將多個網址指向完全相同的代碼。當網站需要使用當前的tenantid時,只需根據傳入的URL查找即可。

如果我這樣做了,我打算花費大約1到2小時的時間在數據庫中的每個表上花費大約1到2小時「多租戶」。顯然有些表格(和他們的查詢)會更快;別人會花更長的時間。順便說一句,這不包括像定製每個租戶的UI(外觀/感覺)或任何性質的東西。如果你需要這樣做,那麼你必須在服務器上爲每個租戶創建一個目錄來保存他們的樣式表或直接從數據庫中加載它(這對於緩存來說有它自己的問題)。

通常,您在項目開始時爲此進行了設計。改裝已經(或幾乎)完整的項目是PITA。

最後,測試,測試,測試和做更多的測試。你將不得不確保每一個查詢只提取它絕對需要的數據。

+1

本文討論幾種數據庫設計:http://msdn.microsoft.com/en-us/library/aa479086.aspx – rboarman 2011-02-11 00:11:17

+0

@rboarman:很好的鏈接。我忘了那個。 – NotMe 2011-02-11 01:26:54