小编Nic*_*ino的帖子

安全地保护延迟加载的模块(Angular 2)

我正在开发一个应用程序,我有一个用户区和一个管理区.我把它们分成了单独的Angular 2模块.我已经成功实现了延迟加载,因此只有在用户请求'/ admin'时才能加载管理模块.

从Angular 2文档中,我看到我可以像这样指定一个"canLoad"防护:

  {
    path: 'admin',
    loadChildren: 'app/admin/admin.module#AdminModule',
    canLoad: [AdminGuard]
  }
Run Code Online (Sandbox Code Playgroud)

并在AdminGuard类中实现一个函数canLoad,如下所示:

canLoad(route: Route): boolean {
  return this.authService.isAdmin();
}
Run Code Online (Sandbox Code Playgroud)

(其中isAdmin()可以调用后端API,后者将返回当前用户的角色或类似的东西)

但这是否会阻止任何非管理员加载AdminModule?除非我误解,所有这些代码都位于客户端,所以有什么可以阻止客户端修改"canLoad"方法以便它总是返回true吗?像这样:

canLoad(route: Route): boolean {
  return true;
}
Run Code Online (Sandbox Code Playgroud)

从而允许客户端加载他们想要的任何模块.

显然,对需要管理员状态的后端API的任何调用都将受到保护,但似乎任何用户都可以查看管理UI,这对我来说似乎有点奇怪.有人可以为我清楚这一点吗?

authentication angular2-routing angular

11
推荐指数
1
解决办法
2539
查看次数

标签 统计

angular ×1

angular2-routing ×1

authentication ×1