【发布时间】:2020-03-23 19:45:52
【问题描述】:
我想为我的 ASP.NET Core 应用创建基于声明的授权:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("Founders", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
}
问题是我有一个不平凡的方法来解决员工编号(1 到 5),我想使用 DI 服务:
public interface IEmployeeProvider {
string[] GetAuthorizedEmployeeIds();
}
我想注入此服务并在 AddPolicy 中使用它,例如:
services.AddAuthorization(options =>
{
options.AddPolicy("Founders", policy =>
policy.RequireClaim("EmployeeNumber", *employeeProvider.GetAuthorizedEmployeeIds()));
});
注意
我知道我可以编写自己的 AuthorizationHandler 来轻松注入 IEmployeeProvider,但我反对这种模式,因为:
- 已经有一个处理程序可以满足我的需要
- 我需要为每种索赔类型和每个不同的要求编写一个新的处理程序
- 这是一种反模式,因为员工 ID 确实应该是需求的一部分,而处理程序应该是处理需求的通用组件
所以我正在寻找一种在构建策略时注入服务的方法
【问题讨论】:
标签: c# asp.net-core dependency-injection authorization