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
9
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