Обычный способ проверить, что политика выполняется в системе авторизации ASP.NET Core, - это настроить политику в ConfigureServices
примерно так:
services.AddAuthorization(conf => {
conf.AddPolicy("UserHasRecentPassport", policy => policy.RequireAssertion(ctx => { return ctx.User.HasRecentPassport(); }));
}
... и затем указать ее дляконтроллер или действие, использующее AuthorizeAttribute
, например:
[Authorize("UserHasRecentPassport")]
public class HomeController : Controller {
public IActionResult Index() {
return View();
}
}
Однако я пишу помощник по тегам, который должен проверить, соблюдается ли определенная политика. Поэтому мне нужно просто проверить это в коде, а не использовать подход AuthorizeAttribute
, т.е. что-то вроде:
public override void Process(TagHelperContext context, TagHelperOutput output) {
output.TagName = null;
if (!policyRequirementIsMet("UserHasRecentPassport")) {
output.SuppressOutput();
}
}
Можно ли как-нибудь реализовать policyRequirementIsMet
, чтобы он перешел к ASP.NET Core и сказал: «Скажите, соблюдается ли политика с именем X»?