Angular 2路由器可以激活Auth Guard

时间:2017-03-16 11:57:26

标签: angular typescript angular2-routing router canactivate

过去4个小时我一直在寻找这个,但却无法找到答案。

我写了几个Authguards,我希望能够告诉路由器,如果其中一些是真的,它应该给予许可,但有角度的2路由器检查每个守卫是否为真,然后给予许可,否则它将阻止链接,这有什么好办法吗?我可以写几个身份验证警卫,但我认为这不是一个好主意。

例如,我希望管理员和超级用户可以访问/profile页面,但我不希望普通用户访问/profile页面

2 个答案:

答案 0 :(得分:1)

你可以将你的警卫注射到一个父守卫中并自己控制:

    @Injectable()
    class Guard implements CanActivate {

      constructor(private guard1: Guard1, private guard2: Guard2) {}

      canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):boolean {
        // I'm assuming that your guard1.canActivate and guard2.canActivate return boolean
        return guard1.canActivate() || guard2.canActivate();
      }
    }

在您的路线配置中,仅使用Guard警卫:

{
  path : 'route',
  canActivate : Guard 
  ...
}

当然,您可以在其他路线中使用guard1guard2

答案 1 :(得分:1)

您可以在身份验证后卫中使用CanLoad界面。例如,让我们说你的路线就是这样;

{
     path: 'profile',
     component: 'ProfileComponent',
     canLoad: [
          AuthenticationGuard
     ]
}

AuthenticationGuard中,实施CanLoad界面。如果用户没有此链接的权限,则不会加载此路由的模块。

export class AuthenticationGuard implements CanLoad {
     canLoad(route: Route): Observable<boolean> | Promise<boolean> | boolean {
          //in here ask your authentication service to check current user has permission for this route
     }
}

我希望它有所帮助,请让我知道更多问题。