2015-06-24 3 views
0

Как я могу добавить авторизацию в AngularJS и ui.router? Я использую modulg ng-oauth https://github.com/andreareginato/oauth-ngAngularJS добавление авторизации к маршрутам

Могу ли я использовать следующие примеры со страницы 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); 
}); 

Спасибо, Simon

ответ

0

Вы можете создать некоторые постоянные роли, как это:

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

Добавить это пользовательские данные/константы для ваших состояний:

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

Итак, когда вы проверяете подлинность и извлекаете эти роли из своей базы данных, вы можете сохранить это в своем пользовательский объект и сеанс, чтобы вы могли в конечном итоге проверить это при изменении маршрута ...

В вашей службе авторизации (кроме входа в систему, выхода из системы и т. д.) вы добавляете следующие методы.

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); 
}, 

Итак, когда вы изменить маршрут в приложениях происходит .run проверка блока и предотвращение возможно.

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

Ofcourse это просто пример, и иметь в виду, есть и другие решения.

Смежные вопросы