angularjs: encaminhamento condicional em app.configuracao

Estou a enfrentar um problema em angular.js ui-router e não capaz de resolver isso .

Questão:

quero que o utilizador aceda a todas as rotas definidas na configuração se o Utilizador for o empreendedorismo e restringir algumas rotas se o Utilizador for o utilizador empresarial.

as rotas estão definidas na configuração:

 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'
    })
Alguém pode ajudar-me a resolver este problema, porque de acordo com o meu aplicativo de compreensão.o js é carregado antes de todos os controladores . Certamente eu posso verificar no controlador se o Usuário é Empreendediseadmin ou Enterprise user mas até então todas as rotas já estão configuradas e o usuário tem acesso a elas.

Existe alguma maneira de eu poder fazer a chamada ajax no bloco de configuração e depois definir uma variável global e depois, verificando-a, Posso configurar algumas rotas ou não ??

qualquer ajuda será apreciada. Relativamente a

Author: Ilan Frumer, 2014-01-07

1 answers

$ StateProvider.o estado tem uma propriedade de dados. Uma maneira é adicionar a opção auth aos seus Estados.
$stateProvider.state('Registration.Instructors', {
     url: "/Instructors",
     templateUrl: '/Scripts/App/Instructors/Templates/instructors.html', 
     controller: 'InstructorController',
     data: { auth: "EnterpriseAdmin"}
})

Depois pode ouvir o evento disparado pelo ui-router antes de qualquer estado começar a carregar e impedi-lo se o utilizador não estiver autorizado:

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;
    }
  })
});
Podes até redireccioná-lo para outro estado, com base na tua lógica ui.
 $state.transitionTo('login');
 25
Author: Ilan Frumer, 2014-01-07 22:11:13