javascript - Angular 5多个条件路由: "AuthGuards"

标签 javascript angular typescript

我正在尝试在 Angular 5 中创建条件路由,我已经看到了这篇文章和 Angular 的官方里程碑页面: Angular2 conditional routing

但是我没有找到根据输入变量创建多个条件的方法。 这是我的代码:

import { Injectable } from '@angular/core';
import {CanActivate, Router, RouterStateSnapshot, ActivatedRouteSnapshot} from '@angular/router';
import {AuthServiceService} from './auth-service.service';
@Injectable()
export class AuthguardService  implements CanActivate{

    constructor(
        private router: Router,
        private AuthService:AuthServiceService
    ) {}

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
        if(this.AuthService.ValidAs("User")!=true){
            this.router.navigate(['pages/login']);
            return false;
        }else{
          return true;
        }
    }

}

我的 AuthService.ValidAs() 方法采用一个参数来确定用户的类型,以尝试验证是否有权访问路由并返回一个 bool 值。我有三种类型的用户,如何将额外的参数传递给路由中的 canActivate 属性,以便将其用作我的 ValidAs 方法的参数。

如果有任何其他方法可以在不增加文件的情​​况下创建多个 canActivate 实例,请告诉我。

最佳答案

您可以将 data 对象传递给任何这样的路由:

...
{
   path:'dashboard',
   component:DashboardComponent,
   canActivate:[
      AuthGuard
   ],
   data:{
      roles: ['ROLE_ADMIN', 'ROLE_EDITOR', 'OTHER_ROLE'],
      // any other relevant data to make your checks
   }
},
...

然后在您的 AuthGuard 中您可以检索数据,例如:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    ...
    const roles = route.data[ 'roles' ] as Array<string>;

    // Do other checks here
    ...
}

关于javascript - Angular 5多个条件路由: "AuthGuards",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49938649/

相关文章:

arrays - 在 typescript 中将动态类型定义为数组

javascript - 如何在 Ionicframework 中输出异步/可观察数据?

angular - 调用 Http.post 不会触发 Angular 6 中的帖子

angular - ViewChild 与 Directive 获取 ViewContainerRef

google-maps - 如何在 angular2 中显示带有地址的谷歌地图

angular - Ionic 3 Slides 组件 - 实现下一个和上一个按钮

javascript - Angular HttpClient如何将结果传递给模板

javascript - jQuery 表单验证

javascript - 在递归循环中附加 <ul> 和 <li>

javascript - Socket.io 在新连接上触发断开事件