В проекте .Net core Webapi 2.1
у меня есть множество методов действий.
Все методы действий должны быть авторизованы для одной и той же политики (с именем FooPolicy
), но с другим обязательным аргументом.
Основано на Microsoftdocs: Policy-Based-Authorization Одним из способов было бы объявить тонны политик на основе другого входного аргумента:
services.AddAuthorization(options =>
{
options.AddPolicy("FooPolicy1", policy =>policy.Requirements.Add(new FooRequirement(1)));
options.AddPolicy("FooPolicy2", policy =>policy.Requirements.Add(new FooRequirement(2)));
options.AddPolicy("FooPolicy3", policy =>policy.Requirements.Add(new FooRequirement(3)));
//... May be 30 more same policies here ...
});
Как я упоминал ранее, только другая часть находится в new FooRequirement(diffArgs)
.Другой проблемой для этого решения будет добавление каждого FooPolicy
в соответствующий метод действия, и вы можете пропустить пару тем:
[Authorize(Policy = "FooPolicy1")]
public IActionResult ActionMethodFoo1(...) {...}
[Authorize(Policy = "FooPolicy2")]
public IActionResult ActionMethodFoo2(...) {...}
[Authorize(Policy = "FooPolicy3")]
public IActionResult ActionMethodFoo3(...) {...}
...List still goes on...
Есть ли какое-либо решение, например: Объявитеполитика, но использовать ее с другим экземпляром FooRequirement
(который имеет тип IAuthorizationHandler
)?вот так:
services.AddAuthorization(options =>
{
options.AddPolicy("FooPolicy", policy =>policy.Requirements.Add(?));
});
И о методах действия:
[Authorize(Policy = "FooPolicy", required = new FooRequirement(1))]
public IActionResult ActionMethodFoo1(...) {...}
[Authorize(Policy = "FooPolicy", required = new FooRequirement(2))]
public IActionResult ActionMethodFoo2(...) {...}
[Authorize(Policy = "FooPolicy", required = new FooRequirement(3))]
public IActionResult ActionMethodFoo3(...) {...}
Основная идея - объявить политику один раз .Два последних кодовых блока являются псевдокодом. Кто-нибудь знает практическое решение с подобной концепцией?