我正在开发一个Angular2-Meteor
应用程序,我从头开始创建这个应用程序。所以有两个面板,admin
和client
,所以我为它创建了authguard。但我认为我的代码不够好。
那么我的authguard如何运作:
canActivate = () => {
if(Meteor.userId()) {
if(!Meteor.user()) {
var timeOutReturnValue = new Promise((resolve) => {
var MeteorUserFinder = Meteor.setInterval(() => {
if(Meteor.user()){
var admin = Roles.userIsInRole(Meteor.userId(), 'admin');
var employee = Roles.userIsInRole(Meteor.userId(), 'employee');
if(admin){
Meteor.clearTimeout(MeteorUserFinder);
resolve({status: Boolean(false), role: 'admin'});
}
else if(employee){
Meteor.clearTimeout(MeteorUserFinder);
resolve({status: Boolean(false), role: 'employee'});
}
}
return
}, 10);
});
return timeOutReturnValue.then((value) => {
if(value.role == 'admin'){
this.router.navigate(['/admin/dashboard']);
}
else if(value.role == 'employee') {
this.router.navigate(['/client']);
}
return Boolean(value.status);
});
}
else if(Meteor.user()) {
var admin = Roles.userIsInRole(Meteor.userId(), 'admin');
var employee = Roles.userIsInRole(Meteor.userId(), 'employee');
if(admin) {
this.router.navigate(['/admin/dashboard']);
return false;
}
else if(employee) {
this.router.navigate(['/client']);
return false;
}
}
}
else {
this.router.navigate(['/signin']);
return false;
}
};
所以在开始时我使用了canActivate函数函数,该函数返回布尔值true或false,它取决于此authguard创建的面板。
所以主要问题是Meteor.user
迟到了,所以我必须使用Promise
和setInterval
。我需要你们帮助我。我怎样才能使它顺利进行,还有其他可能的方法吗?
注意:此authguard只是一个示例,它正在主应用中使用 路由用户必须去的地方。