import { Injectable, inject, OnInit } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot } from '@angular/router';
import { LoginService } from './../login/login.service';
import { UserService } from './../user/user.service';
@Injectable()
export class AuthGuardSuperAdmin implements CanActivate {
constructor(public loginService: LoginService, private router: Router, private userService: UserService){ }
loggedIn; userData; id;
getData(){
this.id = JSON.parse(localStorage.getItem('user'));
this.userService.userSelectOne(this.id).subscribe(data =>{
this.userData = data;
});
}
canActivate(){
if(this.loginService.loggedIn()){
if(this.userData[0]['userStatus']){
return true;
} else {
this.router.navigate(['/product']);
return false;
}
} else {
this.router.navigate(['/login']);
return false;
}
}
ngOnInit(){
this.getData();
this.canActivate();
}
}
我想使用UserService来标识用户的详细信息,下面的代码表示角度路由中的canActivate。但是出现一些错误,我不知道为什么吗?我想根据用户的状态限制用户访问路由。管理员或superAdmin
const appRoutes: Routes = [
{
path: 'user',
component: UserComponent,
canActivate: [AuthGuardSuperAdmin]
},
]
答案 0 :(得分:0)
您需要将 AuthGuardSuperAdmin
导入 app.module.ts
providers: [AuthGuardSuperAdmin ]
答案 1 :(得分:0)
如果您使用的是Angular 6,只需更改以下内容即可:
@Injectable()
收件人:
@Injectable({providedIn: 'root'})
无需其他更改。这将按需注入服务,而无需将其添加到providers数组。