2013-05-10 26 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将检查对本地的域控制器。