我的代码:
@Injectable()
export class UserRouteAccessService implements CanActivate {
authorized = [
'AGREEMENTS_VIEW',
'PROSPECTS_VIEW',
'AGREEMENTS_INSERT_UPDATE',
'PRODUCTS_INSERT_UPDATE',
'PROSPECTS_INSERT_UPDATE',
'DOCUMENTS_VIEW',
'DOCUMENTS_INSERT_UPDATE',
];
constructor(private router: Router, private securityService: CralSecurityService) {
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
//boolean var
this.securityService.securityActions().subscribe(
data => {
//control if auth. is correct
//if yes set true
//if not set false
},
error => {
//return an error
}
)
//return boolean
}
}
评论是id想要做的,但是我真的不知道该写些什么,因为这是我第一次使用angular 4。
基本上,如果要发送来自授权的某些参数,则我想将其设置为True,如果服务中没有参数,则要设置为false。
我希望这很清楚,如果您需要更多信息,请告诉我:)
服务:
securityActions(): Observable<any> {
return this.http.post<Observable<any>>(
`${this.ENDPOINT}/security-actions`,
null,
);
}
答案 0 :(得分:0)
您想返回一个布尔值,但是该布尔值只能异步获取。因此,您不能返回布尔值。幸运的是,如您在方法的返回类型中所见,您可以返回Observable<boolean>
。一个Observable(或一个Promise)正是用来做到这一点的:返回异步结果。
因此,请勿订阅securityActions()
返回的可观察值。而是使用map()
和catchError()
运算符将可观察对象转换为可观察对象:
return this.securityService.securityActions().pipe(
map(data => {
//control if auth. is correct
//if yes set true
//if not set false
},
catchError(() => of(false))
);
注意:如果您仍在使用Angular和RxJS的旧版本,则应该升级。如果确实还不能,则需要将上面的代码调整为使用的旧版本RxJS:
// TODO import the required operators, as documented in your old version of RxJS
return this.securityService.securityActions().map(
data => {
//control if auth. is correct
//if yes set true
//if not set false
}
).catch(() => of(false));