2012-05-04 103 views
1

我正在創建一個單一的Web應用程序,我將部署到不同的站點(例如,red.domain.com,blue.domain.com等)。我希望不同的角色能夠訪問不同的網站(例如,「紅色」角色可以訪問red.domain.com)。基於網站/ URL的ASP.NET MVC角色授權

當前我正在使用控制器範圍的身份驗證(例如[Authorize(Roles =「red」)])。當我將應用程序部署到一個站點時,我必須改變每個控制器上的角色(例如從「紅色」到「藍色」),這看起來很荒謬。

任何人有任何想法可以簡化這個?也許我可以在IIS網站上創建自動應用正確角色的設置?

非常感謝。

+1

做那些不同的部署共享同一個數據庫? –

+0

不可用 - 單獨的數據庫。 – Gabe

+1

那麼如果你只是使用相同的角色名稱呢? –

回答

1

可能是依賴注入的好地方。像StructureMap庫允許你定義在web.config中類型映射(我假設你爲每個站點一個web.config中)

所以,如果你有RedControllerBlueController,雙方實現共同的接口IColourfulController它會是這個樣子:

<!-- red web.config--> 
<DefaultInstance 
     PluginType="IColourfulController, [assembly name]" 
     PluggedType="RedController, [assembly name]" /> 

<!-- blue web.config--> 
<DefaultInstance 
     PluginType="IColourfulController, [assembly name]" 
     PluggedType="BlueController, [assembly name]" /> 

// when you need the controller 
IColourfulController controller = 
    ObjectFactory.GetInstance<IColourfulController>(); 

兩個站點可以使用相同的代碼用於獲取的控制器,但在web.config中說,它是否會是藍色或紅色。