Учтите, что у меня есть .NET Controller с авторизацией на основе политик:
public class ImportantController: Controller {
[HttpGet]
[Authorize(Policy = "CanAccessVIPArea")]
public IActionResult ShowInformation() {
...
return OK(VipData);
}
[HttpPost]
[Authorize(Policy = "CanChangeVIPData")]
public IActionResult SaveInformation([FromBody] VipData) {
...
return CreatedAtAction(...);
}
}
Очевидно, реальный пример гораздо сложнее; Я прошу прощения, если мое упрощение приводит к слишком много притворства в этом. Также реальным применением является SPA с угловым передним концом; но я не думаю, что это имеет значение для целей этого вопроса.
Когда пользователь звонит ShowInformation()
, я показываю много данных. На этой странице у меня есть кнопка Save
, которая вызывает SaveInformation()
. Промежуточное ПО авторизации проверяет правильность политики, и все работает нормально.
Проблема в том, что к тому времени, когда пользователь нажимает кнопку Сохранить, она вводит много данных только для того, чтобы выяснить, что у нее нет прав на сохранение. Очевидно, что приводит к плохому опыту. Я хочу проверить разрешения для SaveInformation в промежуточном программном обеспечении, которое вызывается, когда пользователь вызывает ShowInformation . Я бы предпочел не проверять наличие жестко заданной политики, поскольку она находится на сервере и может меняться (у нас довольно сложная система управления разрешениями, которая манипулирует разрешениями во время выполнения). Вызов SaveInformation
находится в том же сервисе Angular, что и ShowInformation
, и его очень легко проверить ...
Я хотел бы вызвать что-то вроде /api/SaveInformation?dryrun
, которое будет закорачивать конвейер после авторизации промежуточного программного обеспечения с успехом или неудачей.