2011-10-28 106 views
3

我們目前正在開發一個asp.net MVC3(CSS)的多租戶網站。我們已經創建了一個租戶配置部分在我們的web.config W /結構如下:ASP.NET MVC多租戶應用問題

<tenants> 
    <tenant name="client1" baseUrl="client1.domain.com"> 
    <settings> 
     <setting name="siteName" value="client 1 site"> 
    </settings> 
    </tenant> 
    <tenant name="client2" baseUrl="client2.domain.com"> 
    <settings> 
     <setting name="siteName" value="client 2 site"> 
    </settings> 
    </tenant> 
</tenants> 

而在我們的代碼,我們都或多或少從我們ITenant界面創建的具體類租戶建設者。

一切正常渲染每個租戶我們的網站,一旦我們能夠解決這個問題。然而,我不覺得這樣做是兩件事。 另外請注意,雖然我們正在進行依賴注入,但我們並未使用第三方IOC容器(現在所有DI都是自定義的)。

  1. 控制器動作覆蓋 - 目前我們已經在我們的租戶一些方法作爲控制器動作覆蓋(返回一個ActionResult)被稱爲實際控制人的行動。例如 - 如果我們需要租戶特定的Home/Index邏輯,我們可以這樣做:return currentTenant.HomeIndex()。 而不是這樣做,我可以使用ControllerFactory或ServiceLocator?如果有的話可以解釋一下這個最好的方法嗎?

  2. 訪問 - 現在我們的兩位租戶等同於以下內容:client1 =免費用戶,client2 =付費用戶。 儘管我們使用MembershipProvider來授權用戶,但我們已經創建了一個ActionFilter來檢查用戶類型/級別並繼續或重定向到相應的站點。有更聰明的方法來做這些檢查嗎?

在此先感謝。

回答

0

在第一部分,你可以在動作聲明一個額外的變量,即:你可以做

public ActionResult Index(Itenant tenant) 

和,而不是返回currentTenant.HomeIndex()

return Action("Index", new { tenant = currentTenant}); 

這將自動工作。 (或者你可以skipe新{租戶..}部分,並使用自定義的模型綁定,如果你感到格外冒險!)

第二部分,這其實是更聰明的方式。如果您想要重定向的自定義安全許可,則必須實施自定義過濾器。