angularjs: условная маршрутизация в приложении.конфиг

я столкнулся с проблемой в angular.JS ui-маршрутизатор и не в состоянии разобраться .

вопрос:

Я хочу, чтобы пользователь получил доступ ко всем маршрутам, определенным в config, если пользователь является EnterpriseAdmin, и ограничил некоторые маршруты, если пользователь является корпоративным пользователем.

маршруты определены в 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'
    })

может кто-нибудь помочь мне решить эту проблему, потому что в соответствии с моим пониманием приложения.js загружается перед всеми контроллерами . Конечно, я могу проверить контроллер, если пользователь-либо EnterpriseAdmin, либо Enterprise user, но до этого времени все маршруты уже настроены и пользователь имеет к ним доступ.

есть ли способ, которым я могу сделать вызов ajax в блоке config, а затем определить глобальную переменную, а затем, проверив ее, я могу настроить некоторые маршруты или нет ??

любая помощь будет оценили С уважением

1 ответов


$stateProvider.состояние имеет свойство данных. Один из способов-добавить опцию auth в ваши состояния.

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

затем вы можете прослушать событие, запущенное ui-маршрутизатором, прежде чем любое состояние начнет загрузку и предотвратить его, если пользователь неавторизован:

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;
    }
  })
});

вы даже можете перенаправить его в другое состояние, основываясь на вашей логике пользовательского интерфейса:

 $state.transitionTo('login');