C# 无法在“授权”属性上动态发送Active Directory组名
我想动态分配Active Directory组名作为授权筛选器的属性 目前,我们有两个Active Directory组,一个用于DEV,另一个用于Prod。但是,如果我在本地调试时可以访问DEV,我需要访问action方法。如果广告组是prod,我就没有访问action方法的权限 我尝试在静态类classA中使用常量C# 无法在“授权”属性上动态发送Active Directory组名,c#,asp.net-mvc,asp.net-core,asp.net-mvc-4,.net-core,C#,Asp.net Mvc,Asp.net Core,Asp.net Mvc 4,.net Core,我想动态分配Active Directory组名作为授权筛选器的属性 目前,我们有两个Active Directory组,一个用于DEV,另一个用于Prod。但是,如果我在本地调试时可以访问DEV,我需要访问action方法。如果广告组是prod,我就没有访问action方法的权限 我尝试在静态类classA中使用常量 public const string DevActiveDirectoryName = "DevdirectoryName"; public const
public const string DevActiveDirectoryName = "DevdirectoryName";
public const string ProdActiveDirectoryName = "ProddirectoryName";
我的行动方法是这样的:
[Authorize(Roles = ClassA.DevActiveDirectoryName)]
public async task<Iactionresult>GetMemberID()
{
}
[授权(角色=ClassA.DevActiveDirectoryName)]
公共异步taskGetMemberID()
{
}
上述解决方案的唯一问题是,如果我想部署到prod,我需要更改代码并部署它。相反,若我可以动态地将值传递给属性,那个将解决我的问题。我试过很多方法。请为这种情况提出最佳解决方案。这类问题有解决办法吗?非常感谢您的帮助。您可以在web.Config文件的
中添加一个条目,并使用ConfigurationManager查找应分配给变量ActiveDirectoryName
的值
<appSettings>
<add key="ActiveDirectoryName" value="DevdirectoryName" />
... // other keys
</appSettings>
如果您使用的是Visual Studio,则web.config有两种不同的配置(web.debug.config/web.release.config)。您可以使用debug进行开发和发布,以在生产环境中工作
这将保持不变,仅更改您的配置文件
[Authorize(Roles = ClassA.ActiveDirectoryName)]
public async task<Iactionresult>GetMemberID()
{
}
[授权(角色=ClassA.ActiveDirectoryName)]
公共异步taskGetMemberID()
{
}
您可以在web.Config文件的
中添加一个条目,并使用ConfigurationManager查找应分配给变量ActiveDirectoryName
的值
<appSettings>
<add key="ActiveDirectoryName" value="DevdirectoryName" />
... // other keys
</appSettings>
如果您使用的是Visual Studio,则web.config有两种不同的配置(web.debug.config/web.release.config)。您可以使用debug进行开发和发布,以在生产环境中工作
这将保持不变,仅更改您的配置文件
[Authorize(Roles = ClassA.ActiveDirectoryName)]
public async task<Iactionresult>GetMemberID()
{
}
[授权(角色=ClassA.ActiveDirectoryName)]
公共异步taskGetMemberID()
{
}
为了能够更改不同环境的组名,您需要使用配置设置而不是常量。关于如何为ASP.NET核心应用程序提供配置设置,有许多选项。这是一个概述
如果您的应用程序使用默认主机生成器,它将从各种源读取配置设置,例如appsettings.json。您可以将设置添加到此文件(如果该文件尚不存在,请将其添加到项目),例如:
对于您的开发环境,有一个专用文件appsettings.dev.json
,可用于保存开发设置:
{
"ADGroupName": "DevdirectoryName"
}
使用Authorize
属性保护控制器时,需要向构造函数提供一个常量值。由于以后可以更改配置设置,因此(显然)它不是常量
因此,您必须在Startup.cs中的ConfigureServices
方法中设置一个具有常量名称的策略:
var adGroupName = Configuration.GetValue<string>("ADGroupName");
services.AddAuthorization(options =>
{
options.AddPolicy("ADGroupPolicy", policy =>
{
// This requirement checks for the group
policy.RequireRole(adGroupName);
});
});
为了能够更改不同环境的组名,您需要使用配置设置而不是常量。关于如何为ASP.NET核心应用程序提供配置设置,有许多选项。这是一个概述 如果您的应用程序使用默认主机生成器,它将从各种源读取配置设置,例如appsettings.json。您可以将设置添加到此文件(如果该文件尚不存在,请将其添加到项目),例如: 对于您的开发环境,有一个专用文件
appsettings.dev.json
,可用于保存开发设置:
{
"ADGroupName": "DevdirectoryName"
}
使用Authorize
属性保护控制器时,需要向构造函数提供一个常量值。由于以后可以更改配置设置,因此(显然)它不是常量
因此,您必须在Startup.cs中的ConfigureServices
方法中设置一个具有常量名称的策略:
var adGroupName = Configuration.GetValue<string>("ADGroupName");
services.AddAuthorization(options =>
{
options.AddPolicy("ADGroupPolicy", policy =>
{
// This requirement checks for the group
policy.RequireRole(adGroupName);
});
});
您好Jawad-我感谢您的回复,但这是.NETCore2.1中的实现。我不认为web.config可以使用。还有其他想法吗?在.net core的appsettings.json上。使用配置文件作为值的相同想法。对于.net 2.1Hi Jawad,我感谢您的回复,但这是在.net core 2.1中实现的。我不认为web.config可以使用。还有其他想法吗?在.net core的appsettings.json上。使用配置文件作为值的相同想法。对于.net 2.1 Excellent。这就是我所看到的简短而简单的实现。谢谢你,先生!杰出的这就是我所看到的简短而简单的实现。谢谢你,先生!