Sal*_*man 9 angularjs angular-ui-router
我在angular.js ui-router中遇到了一个问题而无法对其进行排序.
如果用户是EnterpriseAdmin,我希望用户访问config中定义的所有路由,如果用户是Enterprise用户,我希望限制某些路由.
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)
归档时间: |
|
查看次数: |
18328 次 |
最近记录: |