angularjs:app.config中的条件路由

Sal*_*man 9 angularjs angular-ui-router

我在angular.js ui-router中遇到了一个问题而无法对其进行排序.

问题:

如果用户是EnterpriseAdmin,我希望用户访问config中定义的所有路由,如果用户是Enterprise用户,我希望限制某些路由.

路由在config中定义:

 var adocsModule = angular.module('myApp', ['ngResource', 'ngRoute','ui.bootstrap','ui.router', 'ngAnimate']) 
.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
   $stateProvider.state('Registration', {
        url: "/Registration",
        templateUrl: '/Scripts/App/Registration/Templates/registration.html', controller: 'CoursesController'
    })
    .state('Registration.Instructors', {
         url: "/Instructors",
         templateUrl: '/Scripts/App/Instructors/Templates/instructors.html', controller: 'InstructorController'
    })
    .state('Registration.Courses', {
         url: "/Courses",
         templateUrl: '/Scripts/App/Instructors/Templates/courses.html', controller: 'CoursesController'
    })
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题,因为据我所知,app.js是在所有控制器之前加载的.当然,如果用户是EnterpriseAdmin或Enterprise用户,我可以检入控制器,但到那时为止所有路由都已配置且用户可以访问它们.

有没有办法我可以在配置块中进行ajax调用,然后定义一个全局变量然后通过检查它我可以配置一些路由或不?

任何帮助将不胜感激

Ila*_*mer 26

$ stateProvider.state有一个数据属性.一种方法是为您的州添加auth选项.

$stateProvider.state('Registration.Instructors', {
     url: "/Instructors",
     templateUrl: '/Scripts/App/Instructors/Templates/instructors.html', 
     controller: 'InstructorController',
     data: { auth: "EnterpriseAdmin"}
})
Run Code Online (Sandbox Code Playgroud)

那么你可以在任何状态开始加载之前监听由ui-router发出的事件,并在用户未经授权时阻止它:

app.run(function($rootScope, user){
  $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
    if ( toState.data.auth === 'EnterpriseAdmin' && !user.isAdmin() ) {
        event.preventDefault();
        return false;
    }
  })
});
Run Code Online (Sandbox Code Playgroud)

您甚至可以根据您的ui逻辑将他重定向到另一个状态:

 $state.go('login');
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,`$ state.go()`现在是[推荐](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#stategoto--toparams--options)'高 - 水平的过渡方式. (12认同)