Я использую идентификацию на основе утверждений в ASP.NET Core 2.2
Из того, что я прочитал, можно сделать пользовательские утверждения / авторизацию политики, используя следующий формат (находится в этом ответе)
[Authorize(Policy = "DataDrivenExample")]
public IActionResult GetFooBar()
{
// Omitted for brevity...
}
Однако в моем приложении мне нужно проверить, имеет ли пользователь доступ к ЭТОМУ конкретному объекту. Например, что-то вроде этого:
[Authorize(Policy = "EditFooBar:" + id)]
public IActionResult EditFooBar(string id)
{
// Omitted for brevity...
}
Затем обработчик что-то вроде этого?
public class EditFooBarHandler : AuthorizationHandler<DataDrivenRequirement>
{
protected override void Handle(AuthorizationContext context,
string id)
{
var hasClaim = context.HttpContext.User.Claims.Any(c => c.Type == "EditFooBar" && c.Value == id);
...etc...
}
Не реально создать отдельную политику для каждого возможного значения id
.
Как можно передать данные в средство проверки требований политики, которое отличается для каждого запроса к этой конечной точке API?