我想允许一些用户输入路线,而其他用户则不允许。
我使用simple auth进行身份验证,它将使用promise加载用户数据。问题是willTransition()
不会等到我的用户被加载,因此,它将显示索引路由,然后我可以检查用户是否可以访问它。
所以在router.js我有:
willTransition(oldRoute, nextRoute, transition) {
return this.get('session').authenticate('authenticator:application').then(() => {
if(this.get('user.isAdmin')) return true
else alert('not allowed to enter')
})
}
这只是一个真实的例子我更喜欢user.isCat
和猫被允许进入/猫和/可爱的路线。
我知道我也可以在路线的user.isAdmin
查看beforeModel()
,但我有很多其他路线和权限组,所以我想在路由器中有一个地方来管理它。
您可以中止转换并在承诺解决后重试。
所以你的例子看起来像这样:
willTransition(transition) {
if (this.get('pendingTransition.targetName') == transition.targetName) {
this.set('pendingTransition', null);
return true;
}
transition.abort();
this.get('session').authenticate('authenticator:application').then(() => {
if (this.get('user.isAdmin')) {
this.set('pendingTransition', transition);
transition.retry();
} else {
alert('not allowed to enter')
}
})
}
看到:
willTransitionTo不会停止承诺。因此,实现的最佳方法是在这种情况下中止转换。像下面这样的东西可以帮到你。
willTransition: function(transition) {
return this.get('session').authenticate('authenticator:application').then(() => {
if(!this.get('user.isAdmin')){
transition.abort();
}
if(!this.get('user.isCat')){
transition.abort();
}
});
}
希望这可以帮助。