2014-12-05 4 views
3

В настоящее время я внедряю ng-token-auth в свое угловое приложение, в то время как это отлично работает, у меня возникают проблемы с ограничением доступа к определенным страницам.ng-token-auth и разрешения маршрута

В некоторых из моих маршрутов у меня есть несколько дополнительных параметров:

data: { 
    title: 'Dashboard', 
    restricted: true, // Only allow logged in users 
    role: 2 // Only allow a specific role 
} 

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

Я следовал ng-token-auth предложения об использовании родительского маршрута с решимостью, чтобы проверить, если пользователь вошел в систему или нет:

resolve: { 
    auth: function($auth) { 
     console.log('validate user'); 

     return $auth.validateUser(); 
    } 
} 

Теперь проблема возникает, когда я первый загрузить приложение, очевидно $stateChangeStart событие запускается до того, как $auth.validateUser() был разрешен, из-за чего логин внутри $stateChangeStart не удался, и пользователь перенаправляется на страницу входа.

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

Выполнение этого в $stateChangeStart также не представляется лучшим вариантом, так как это не работает при первой загрузке.

+0

Почему вы не можете проверить 'auth' в' $ stateChangeSuccess'? '$ stateChangeSuccess' будет уволен только AFAIK, когда будут разрешены все обещания' resolve', в том числе 'auth'. –

+0

@NewDev Я мог бы это сделать, но другие маршруты имеют больше обещаний 'resolve', я не уверен, что я должен заставить пользователя загружать дополнительные данные за то, к чему он не может получить доступ. –

+1

Собственно, забудьте о '$ stateChangeSuccess'. Взгляните на этот [SO ответ] (http://stackoverflow.com/a/22540482/968155) вместо –

ответ

1

Я бы рассматривал Authentication и Authorization как две разные вещи.

ng-token-auth поможет вам с проверкой подлинности. Он даже помогает вам выбрать, какие маршруты должны быть доступны для авторизованных пользователей см example-using-angular-ui-router

role: 2 // Only allow a specific role 

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