Page 182 - AngularJS权威教程
P. 182
162 第 16 章 XHR 实践
// ...
};
// 将拦截器和$http的request/response链整合在一起
$httpProvider
.interceptors.push(interceptor);
});
查看15.5节获取更多关于$http拦截器的内容。
2. 使用路由定义受保护资源
如果我们希望始终对某些路径进行保护,或者请求的API不会对路由进行保护,那就需要监
视路由的变化,以确保访问受保护路由的用户是处于登录状态的。
为了监视路由变化,需要为$routeChangeStart事件设置一个事件监听器。这个事件会在路
由属性开始resolve时触发,但此时路由还没有真的发生变化。
通过同拦截器协同工作,这种方式会更加有效。如果不通过拦截器检查状态码,
用户依然有可能发送未经授权的请求。
通过监听器对事件进行监听,并检查路由,看它是否定义为可被当前用户访问。
首先要定义应用的访问规则。可以通过在应用中设置常量,然后在每个路由中通过对比这些
常量来判断用户是否具有访问权限。
angular.module('myApp', ['ngRoute'])
.constant('ACCESS_LEVELS', {
pub: 1,
user: 2
});
通过把ACCESS_LEVELS设置为常量,可以将它注入到.confgi()和.run()代码块中,并在整
个应用范围内使用。
下面,使用这些常量来为每个路由都定义访问级别:
angular.module('myApp', ['ngRoute'])
.config(function($routeProvider, ACCESS_LEVELS) {
$routeProvider
.when('/', {
controller: 'MainController',
templateUrl: 'views/main.html',
access_level: ACCESS_LEVELS.pub
})
.when('/account', {
controller: 'AccountController',
templateUrl: 'views/account.html',
access_level: ACCESS_LEVELS.user
})
.otherwise({
redirectTo: '/'
});
});