Angular 角度4中是否有canActivate的选项/变量

Angular 角度4中是否有canActivate的选项/变量,angular,angular-router-guards,canactivate,Angular,Angular Router Guards,Canactivate,我想根据用户拥有的权限拒绝访问路由。所以我在我的mongoDb中有一个带有用户权限的表和两个简单的保护。一个用于登录用户,一个用于管理员 所以现在我想给用户访问特定路线的权利。因此,我想添加我的canActivate:[checkForRightGuard],它在右侧被解析,所以请检查,但我该如何做呢 我考虑过这个解决方案,因为我不认为我必须为我必须检查的每一项权利创建一个保护——或者 所以我就这样想(当然,这是行不通的,但我认为它显示了我的需要) 您可以将“数据””属性添加到路由,如下所示:-

我想根据用户拥有的权限拒绝访问路由。所以我在我的mongoDb中有一个带有用户权限的表和两个简单的保护。一个用于登录用户,一个用于管理员

所以现在我想给用户访问特定路线的权利。因此,我想添加我的
canActivate:[checkForRightGuard]
,它在右侧被解析,所以请检查,但我该如何做呢

我考虑过这个解决方案,因为我不认为我必须为我必须检查的每一项权利创建一个保护——或者

所以我就这样想(当然,这是行不通的,但我认为它显示了我的需要)


您可以将“数据””属性添加到路由,如下所示:-

{
    path: 'admin/expandSoftware', 
    component: ExpandSoftwareComponent, 
    canActivate: [AdminGuard],
    data: {authorization: 'canExpandSoftware'}
}
然后在route guard中,您可以按如下方式访问它:-

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    console.log(route.data["authorization"]);
    return this.canActivate(route, state);
}
但是要小心,如果使用AOT(提前)编译,可能不允许将动态(运行时)数据传递给路由,因为在使用AOT编译时,路由是在编译时分析的

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    console.log(route.data["authorization"]);
    return this.canActivate(route, state);
}