ASP.NET Core 2 - проверка подлинности с несколькими требованиями ИЛИ для каждой области
У меня есть политика, позволяющая пользователям определенных типов загружать документы, скажем, UserA и UserB
[HttpPost]
[Authorize(Policy = Policy.Upload)]
public async Task<IActionResult> Upload([FromBody] DocumentUploadRequest request)
и в моей настройке я делаю:
services.AddSingleton<IAuthorizationHandler, UserAHandler>();
services.AddSingleton<IAuthorizationHandler, UserBHandler>();
services.AddAuthorization(options =>
{
options.AddPolicy(Policy.Upload, policy => policy
.RequireScope("scope", Scope.UserA)
.Requirements
.Add(new UserARequirement()));
options.AddPolicy(Policy.Upload, policy => policy
.RequireScope("scope", Scope.UserB)
.Requirements
.Add(new UserBRequirement()));
});
Это не работает, потому что когда я вызываю обработчик с помощью Scope "UserA", он запускает UserBHandler и завершается ошибкой, потому что UserA не удовлетворяет требованиям UserB.
Я не уверен, как это реализовать. Я хочу, чтобы 1 политика имела разные требования для каждой области.
Есть идеи?