我想在我的应用程序中使用角度UI路由器的resolve
函数来实现一些安全性。我在这个问题的第二个答案中构建了基于解决方案#2的解决方案:Angular ui-router: how to prevent access to a stateAngular UI路由器和安全
它工作正常,除了我不想允许用户导航到的路由控制器仍然实例化。我或多或少地遵循John Papa对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中的新路由器功能是否相同?似乎在这个时候朝这个方向迈进是一个好的举动,因为这也有助于为Angular 2.0迁移做准备。 –
尽管如此,您的建议确实按预期工作。 –
其实,我把我的评论回来了。在使用此方法调用解析之前,控制器仍会实例化。 –