Resolve ui-router testing ('-' * 25)
A Pen by Robert Parker on CodePen.
<body ng-app="webapp"> | |
<div ui-view> | |
</div> | |
</body> |
Resolve ui-router testing ('-' * 25)
A Pen by Robert Parker on CodePen.
var app = angular.module('webapp', ['ui.router']) | |
.constant('USER_ROLES', { | |
admin: 'admin', | |
manager: 'manager', | |
employee: 'employee' | |
}) | |
.config(function($stateProvider, $urlRouterProvider) { | |
$stateProvider.state('home', { | |
url: '/', | |
controller: 'HomeCtrl', | |
template: '<p>HomeCtrl</p><p><a ui-sref="home.adminonly">Admin Only Area</a></p><div ui-view></div>', | |
resolve: { | |
//Resolve entries are resolved at link-time | |
authorizedRoles: ['USER_ROLES', function(USER_ROLES) { | |
return [USER_ROLES.admin, USER_ROLES.manager, USER_ROLES.employee]; | |
}] | |
} | |
}) | |
.state('home.adminonly', { | |
url: '/adminonly', | |
template: '<p>Only admins are allowed here</p>', | |
resolve: { | |
authorizedRoles: function(USER_ROLES) { | |
return [USER_ROLES.admin]; | |
} | |
} | |
}); | |
$urlRouterProvider.otherwise("/"); | |
}); | |
app.service('authService', function(USER_ROLES) { | |
//fake current roles | |
var userRoles = [USER_ROLES.employee]; | |
this.isAuthorized = function(requiredRoles) { | |
angular.forEach(requiredRoles, function(rr) { | |
if (!userRoles.indexOf(rr)) return false; | |
}) | |
} | |
}) | |
app.run(function($rootScope, $state, USER_ROLES, authService) { | |
$rootScope.$on('$stateChangeStart', | |
function(event, toState, toParams, fromState, fromParams) { | |
//here's where you would call event.preventDefault() if you knew the user wasn't authorized | |
}); | |
$state.go('home'); | |
}) | |
app.controller('HomeCtrl', function($scope, $state, authorizedRoles) { | |
console.log('HomeCtrl'); | |
}); |