AngularJS ajoute une autorisation aux routes

Comment puis-je ajouter une autorisation à AngularJS et à ui.router? J'utilise le modulg ng-oauth https://github.com/andreareginato/oauthng

Puis-je utiliser les exemples suivants de la page http://andreareginato.github.io/oauth-ng/ ?

$scope.$on('oauth:login', function(event, token) { console.log('Authorized third party app with token', token.access_token); }); $scope.$on('oauth:logout', function(event) { console.log('The user has signed out'); }); $scope.$on('oauth:loggedOut', function(event) { console.log('The user is not signed in'); }); $scope.$on('oauth:denied', function(event) { console.log('The user did not authorize the third party app'); }); $scope.$on('oauth:expired', function(event) { console.log('The access token is expired. Please refresh.'); }); $scope.$on('oauth:profile', function(profile) { console.log('User profile data retrieved: ', profile); }); 

Merci Simon

Vous pouvez créer des rôles constants comme ceci:

 .constant('USER_ROLES', { ALL: '*', //@unused ADMIN: 'ROLE_ADMIN'; USER: 'ROLE_USER', ANONYMOUS: 'ROLE_ANONYMOUS' }) 

Ajoutez ces données / constantes personnalisées à vos états:

 $stateProvider.state('myapp.admin', { url: '/admin', ..... data : { authorizedRoles : [USER_ROLES.ADMIN] //Thes } } 

Donc, lorsque vous authentifiez et récupérez ces rôles à partir de votre base de données, vous pouvez le stocker dans votre objet utilisateur et votre session afin que vous puissiez éventuellement vérifier cela lorsqu'un itinéraire change …

Dans votre service d'authentification (à part la connexion, la déconnexion, etc.), vous ajoutez les méthodes suivantes.

 isAuthenticated: function () { return session.hasSession(); }, isAuthorized: function (authorizedRoles) { if (!angular.isArray(authorizedRoles)) { authorizedRoles = [authorizedRoles]; } var roles = session.roles(); var roleIncluded = roles.some(function (role) { return (authorizedRoles.indexOf(role) != -1); }); return (session.hasSession() && roleIncluded); }, 

Donc, lorsque vous modifiez l'itinéraire dans les applications, la validation du bloc d' .run se produit et la prévention est possible.

 $rootScope.$on('$stateChangeStart', function (event, next) { if (authService.isAuthenticated()) { if (next.data.authorizedRoles === null) { handle(); } if (!authService.isAuthorized(next.data.authorizedRoles)) { handle(); } } else { handle(); } } 

Bien sûr, ce n'est qu'un exemple et pensez qu'il y a d'autres solutions.