我正在开发一个具有许多角色的应用程序,我需要使用这些功能来根据这些角色将导航功能阻止到应用程序的各个部分。我意识到我可以为每个角色创建单独的后卫类,但宁愿拥有一个可以以某种方式将参数传递给它的类。换句话说,我希望能够执行以下操作:

{
  path: 'super-user-stuff',
  component: SuperUserStuffComponent,
  canActivate: [RoleGuard.forRole('superUser')]
}

但是,由于您通过的只是警卫的类型名称,因此无法考虑实现此目的的方法。我是否应该只是硬着头皮,为每个角色编写单独的后卫类(class),而打乱我拥有单一参数化类型的优雅幻想呢?

最佳答案

您可以执行以下操作,而不是使用forRole():

{
   path: 'super-user-stuff',
   component: SuperUserStuffComponent,
   canActivate: RoleGuard,
   data: {roles: ['SuperAdmin', ...]}
}
并在您的RoleGuard中使用它
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot)
    : Observable<boolean> | Promise<boolean> | boolean  {

    let roles = route.data.roles as Array<string>;
    ...
}

10-06 04:05