我想为我的 ASP.NET Core 应用程序创建一个基于声明的授权:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("Founders", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
}
Run Code Online (Sandbox Code Playgroud)
问题是我有一个非平凡的方法来解决员工编号(1 到 5),我想使用 DI 服务:
public interface IEmployeeProvider {
string[] GetAuthorizedEmployeeIds();
}
Run Code Online (Sandbox Code Playgroud)
我想注入此服务并在 AddPolicy 中使用它,例如:
services.AddAuthorization(options =>
{
options.AddPolicy("Founders", policy =>
policy.RequireClaim("EmployeeNumber", *employeeProvider.GetAuthorizedEmployeeIds()));
});
Run Code Online (Sandbox Code Playgroud)
笔记
我知道我可以编写自己的 AuthorizationHandler 来轻松注入,IEmployeeProvider但我反对这种模式,因为:
所以我正在寻找一种在构建策略时注入服务的方法