2013-05-10 51 views
0

我目前正在開發一個MVC Intranet網絡應用程序。同一個網絡應用程序將部署在多個域中。我正在使用Windows授權和授權應用程序的本地域中的組。我使用[authorize]屬性裝飾我的控制器動作以保護某些動作。動態MVC [授權]多個域

[Authorize(Roles = @"Domain1\AppUsers")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

因爲這個應用很快就會部署到Domain2,這意味着我將不得不重新整理所有授權的控制器操作。我寧願不必爲每個域部署不同的代碼。有沒有辦法讓我的授權屬性「域感知?」

一隻想到我曾經考慮過在web.config中

<appSettings> 
<add key="AppDomainSecurityContext" value="Domain1"/> 
</appSettings> 

設置域名,然後回顧它在控制器和存儲作爲一個字符串

string AppDomainSecurityContext = System.Web.Configuration.WebConfigurationManager.AppSettings["AppDomainSecurityContext"].ToString();

但隨後如何將該變量放入授權屬性中...

[Authorize(Roles = "" + AppDomainSecurityContext + "\AppUsers")]

不起作用。有沒有更好的辦法?建議?

+0

看起來像MVC屬性[需要常量表達式](http://lostechies.com/jimmybogard/2008/12/12/more-c-attribute-annoyances/)。所以我不能使用變量。編寫我自己的[自定義授權屬性](http://www.diaryofaninja.com/blog/2011/07/24/writing-your-own-custom-aspnet-mvc-authorize-attributes)似乎是唯一的選擇。 – 2013-05-11 17:32:49

回答

1

原來有不需要指定一個域。如果您使用

[授權(角色= 「AppUsers」)

MVC4將檢查對本地的域控制器。