Я пытаюсь реализовать некоторую безопасность в своем приложении, используя функцию углового ui-router resolve
. Я разработал решение, основанное на решении № 2 во втором ответе на этот вопрос: Angular ui-router: how to prevent access to a stateУгловой UI Router & Security
Он отлично работает, за исключением того, что контроллер маршрутов, который я не хочу разрешать пользователям, все еще создается. Я более или менее следую рекомендациям Джона Папы для Angular, поэтому у меня есть функция activate
в каждом контроллере. Я мог бы дважды проверить аутентификацию здесь, но для этого потребуется повторная работа с каждым из моих контроллеров. Кроме того, исключение использования функции $timeout
в функции аутентификации из исходного ответа не оказывает отрицательного воздействия.
Вот как я настройка маршрута, чтобы справиться с этим:
$stateProvider.state('orderqueue', {
url: "/orderqueue",
templateUrl: "views/orderqueue.html",
controller: 'orderQueueController',
controllerAs: 'orders',
role: 'Order Admin',
resolve: {authenticate: authenticate}
});
и моя функция Аутентифицировать выглядит следующим образом:
function authenticate($q,$state,$timeout, UserService) {
(new UserService()).$getUser().then(
function(user) {
var role = ($state.current.role) ? $state.current.role :$state.current.name ;
// alert(role) ;
if (user.userName == 'wmfeltman') {
return $q.when()
} else
{
// $timeout(function() {
// This code runs after the authentication promise has been rejected.
// Go to the log-in page
$state.go('login')
// })
// Reject the authentication promise to prevent the state from loading
return $q.reject()
}
}
)
}
Есть ли способ, чтобы разрешить стрелять до контроллер создается? Документы, похоже, указывают, что так оно и должно работать, но это не так.
Я думаю, это достаточно просто, но не очень желательно. Я действительно продвигаюсь к решению, основанному на данных, для всех моих маршрутов, контроллеров, шаблонов и т. Д., И мне не очень нравится встраивать ссылки контроллера в мои представления. Является ли новый маршрутизатор в 1,5 функции одинаковым? Похоже, что в этот момент может быть хорошим шагом в этом направлении, так как это также поможет в подготовке к миграции с угловым 2.0. –
Для записи, однако, ваше предложение работает так, как ожидалось. –
На самом деле, я возвращаю свой комментарий. Контроллер по-прежнему создается экземпляр до того, как решение вызывается с использованием этой методологии. –