[email protected]
'a yükseltiyorum ve gerekli izinlere sahip değilse, kullanıcıyı farklı bir duruma yönlendirmenin en iyi yolunun ne olduğunu bulmaya çalışıyorum.UI-Router 1.0 yönlendirmesi kullanıcı rolüne bağlı olarak
Bu benim ne var:
.state('company_dashboard', {
url: '/dashboard',
templateUrl: 'dashboard.html',
controller: 'CompanyDashboardCtrl',
resolve: {
user: function(UserService) {
return UserService.getActiveUser();
},
company: function(UserService) {
return CompanyService.getActiveCompany();
},
permissions: function(CompanyService, user, company){
return CompanyService.getUserPermissions(company, user);
}
},
onEnter: function($state, permissions) {
if (permissions.canAccessDashboard === false)
return $state.go('company_landing_page');
}
})
Yukarıdaki örnek çalışır, ancak aşağıdaki hatayı kaydeder: ben, daha iyi bir yolu olmalı düşündürüyor TransitionRejection(type: 2, message: The transition has been superseded by a different transition, detail: Transition#1(''{} -> 'company_landing_page'{}))
.
Yan soru, resolve
sırasında izinleri denetlemek iyi bir uygulama mı?
GÜNCELLEME:
konsol hatası kurtulmak için bana yardımcı $state.go()
$state.target()
için değiştiriliyor. This comment yardım etti. Soru duruyor olsa da, ben bunu doğru yer mi yapıyorum?
.state('company_dashboard', {
data: {
requiresAuthentication: true
}
}
Ve sonra: Ben daha parlak olabilir eminim bile
app.run(function ($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
// Check if user is authenticated
// And route requires authentication
if (!toState.data.requiresAuthentication) {
$state.go(toState.name, toParams);
} else if (user && toState.data.requiresAuthentication) {
$state.go(toState.name, toParams);
} else {
$state.go('login');
}
});
});
Bu oldukça iyi iş gibi görünüyor, şöyle
İlkbaharda ya da bir arka plan çerçevesinde oluşturulmuş şablondaki izinleri kontrol ederdim, bence herkesin kodu görebileceğinden ön taraftaki izinleri kontrol etmek iyi olmaz. –