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: '/'
                         });
                 });
   177   178   179   180   181   182   183   184   185   186   187