【发布时间】:2021-12-01 16:13:42
【问题描述】:
我有一个路由守卫,可以在继续之前检查用户是否有权访问资源。订阅后,我检查用户是否有访问权限,如果没有,则使用parseUrl 重定向或返回true。
@Injectable({ providedIn: 'root' })
export class PortfolioGuard implements CanActivate {
constructor(private resourceAccessService: ResourceAccessService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean | UrlTree {
const id = +route.paramMap.get('id');
// return this.resourceAccessService.checkUserAccessToPortfolio(id);
this.resourceAccessService.checkUserAccessToPortfolio(id).subscribe((hasAccess) => {
if (!hasAccess) {
console.log('No access');
return this.router.parseUrl('/');
} else {
console.log('access');
return true;
}
});
}
}
如果我只返回支票,这可行,但我也希望它根据该支票重定向。
@Injectable({ providedIn: 'root' })
export class PortfolioGuard implements CanActivate {
constructor(private resourceAccessService: ResourceAccessService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
const id = +route.paramMap.get('id');
return this.resourceAccessService.checkUserAccessToPortfolio(id);
}
}
我在第一段代码中遗漏了什么,我是否应该从服务中解决订阅问题...
checkUserAccessToPortfolio(id: number): Observable<boolean> {
const url = this.baseUrl + this.userResourceAccessUrl + '/' + + id + '/portfolio';
return this.http.get<boolean>(url);
}
【问题讨论】:
-
在回调中返回与在方法本身中返回不相同。规范:stackoverflow.com/q/14220321/3001761.
-
@jonrsharpe - 谢谢,我会看看。
标签: angular rxjs canactivate angular-route-guards