Можно ли использовать угловые перехватчики, чтобы предотвратить запуск текущего запроса?
Например, у меня есть ui-grid
, который отображает все заказы, и каждый заказ имеет ссылку Edit
и Remove
. Если пользователь нажимает на любую из этих ссылок и у него нет доступа для выполнения этих действий, я бы хотел, чтобы angular отображал уведомление Access denied
toastr.
Мой вопрос: могу ли я каким-то образом использовать перехватчик угловых ответов для поиска результата статуса HTTP 403 (Forbidden)
и отображения Access denied
toastr, а затем завершить запрос?
Это логика перехватчика responseError:
var responseError = function (rejection) {
if (rejection.status === 401) {
return $injector.get('authService').refreshToken().then(function (response) {
return retryHttpRequest(rejection.config).then(function (response) {
return response || $q.when(response);
}, function () {
$injector.get('$state').go('logout');
return $q.reject(rejection);
});
})
}
else if (rejection.status == 400 || rejection.status == 500) {
notification.error("Unable to process the request due to an error!");
}
else if (rejection.status == 403) {
notification.error("You do not have sufficient permissions!");
}
return $q.reject(rejection);
}
responseError
, хотите взглянуть на него? - person Intrepid   schedule 05.03.2015$q.reject
указал причину повторной попытки запроса и имел бы логику в службе для повторной попытки запроса. Я думаю, что перехватчик должен заниматься только отправкой причин, а не иметь больше$http
логики ИМХО - person Callum Linington   schedule 05.03.2015retryHttpRequest
с другого веб-сайта, который показывает, как реализовать бесшовную аутентификацию с помощью токенов обновления, обнаруживая ошибку 401 и повторяя последний запрос после получения нового токена обновления. Все это работает отлично, и я менее склонен менять этот бит. - person Intrepid   schedule 05.03.2015