ASP.net MVC - 在具有Windows身份验证的多个环境中使用AuthorizeAttribute

时间:2011-11-18 14:57:41

标签: asp.net-mvc asp.net-mvc-3 windows-authentication

我在ASP.net MVC 3应用程序中使用Windows身份验证。我的系统中有几个不同的角色:

Administrator
PowerUser
GeneralUser

我们有一条规则,即每个环境中的AD组名称都不同。

例如,在开发中,角色名称将为:

Administrator_Dev
PowerUser_Dev
GeneralUser_Dev

在制作中它只会是:

Administrator
PowerUser
GeneralUser

在我需要部署到不同的环境时,是否有在这些不同环境中使用Authorize而不更改代码的良好解决方案?

3 个答案:

答案 0 :(得分:1)

我能想到的唯一解决方案是条件编译。

使用条件编译在文件中定义这些常量。

#if DEV
public const string AdministratorGroupName = "Administrator_Dev";
#else
public const string AdministratorGroupName = "Administrator";
#endif

这是使用需要在编译时定义的自定义属性的声明式授权的问题之一。

另一种选择是拥有另一个自定义属性并自己实现动作过滤器。

答案 1 :(得分:1)

你不能只实现所有角色吗?除非有可能将Administrator_Dev角色作为生产站点......

[Authorize(Roles = "Administrator_Dev, Administrator")]

答案 2 :(得分:0)

我只需在 web.config 中创建特定于应用程序的配置部分,将环境特定的AD组的名称放在应用程序配置部分中,然后使用授权属性上的配置属性。然后,我可以通过为每个环境使用自定义web.config来更改组名。对于大多数应用程序,无论如何都需要为每个环境提供不同的连接字符串。有了这个,您可以使用内置的授权属性。