如何对授权逻辑不同的不同路由使用相同的路由保护

How to use same route guard for different routes that differ in authorization logic

对于我的 Angular 6 项目,我有一个可以激活 AuthGuard 来加载组件 A。

我想知道是否可以对组件 B 使用相同的 AuthGuard,它的授权逻辑与组件 A 完全相反?

下面说一下授权组件A的逻辑

我的要求是负载组件B和上面正好相反

组件 A 的现有 auth.guard.ts

export class AuthGuard implements CanActivate {
 
canActivate(next: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean>
{
    return this.checkAuthorization();
}
checkAuthorization():Observable<boolean>{

    let hasActiveSummary:boolean=false;

    return this.apiService.getSummary(url)
    .pipe(
      map((data:any) => {
        console.log("Summary list:", data);
          if(data.length > 0){
            for (let i=0; i< data.length; i++) {
              if(data[i].activationStatus ==='ACTIVE') {
                hasActiveSummary=true;
                return true;
              }
            }
          }
          if(!hasActiveSummary){
            this.router.navigate(['/login']);
            return false;
          }
      })
    )
}

我想知道我可以使用相同的身份验证守卫吗?如果可以,怎么做?

canActivate 方法有 state 属性 类型 RouterStateSnapshot。您可以根据 state.url 做出决定,而只是 return 根据您到达的路线 hasActiveSummary 的倒数。