Я навязываю разные политики для выполнения определенных действий, и я бы хотел определить порядок, в котором эти политики должны быть выполнены. Если пользователь не аутентифицирован, я не должен проверять, есть ли у него разрешения или нет.
При запуске у меня есть:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers()
.RequireAuthorization("UserIsAuthenticated")
.RequireAuthorization("UserIsRegistered");
});
, а затем я использую атрибут [Authorize(Roles = "Administrator")]
по умолчанию и мои [MyAuthorize]
атрибуты.
Порядок, в котором эти политики должны должно быть выполнено:
- Сначала
UserIsAuthenticated
, чтобы проверить, аутентифицирован ли пользователь. - Если они есть, он должен проверить
UserIsRegistered
. - Наконец, атрибуты должны быть применены.
В моем случае порядок имеет значение, потому что у меня есть
services.AddAuthorization(options => { options.InvokeHandlersAfterFailure = false; });
(если пользователь не аутентифицирован, я не могу проверить его утверждения и нет смысла проверять следующие политики).
Однако в некоторых случаях я видел, что атрибуты оцениваются до политик аутентификации.
Есть ли способ наложить порядок требований?