我在ASP.net MVC 3应用程序中使用Windows身份验证。我的系统中有几个不同的角色:
Administrator
PowerUser
GeneralUser
我们有一条规则,即每个环境中的AD组名称都不同。
例如,在开发中,角色名称将为:
Administrator_Dev
PowerUser_Dev
GeneralUser_Dev
在制作中它只会是:
Administrator
PowerUser
GeneralUser
在我需要部署到不同的环境时,是否有在这些不同环境中使用Authorize而不更改代码的良好解决方案?
答案 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来更改组名。对于大多数应用程序,无论如何都需要为每个环境提供不同的连接字符串。有了这个,您可以使用内置的授权属性。