【发布时间】:2017-07-04 14:25:16
【问题描述】:
我正在开发一个应用程序,我有一个用户区和一个管理区。我已将它们分成单独的 Angular 2 模块。我已经成功实现了延迟加载,因此只有在用户请求“/admin”时才能加载管理模块。
从 Angular 2 文档中,我看到我可以像这样指定一个“canLoad”保护:
{
path: 'admin',
loadChildren: 'app/admin/admin.module#AdminModule',
canLoad: [AdminGuard]
}
并在 AdminGuard 类中实现一个函数 canLoad,如下所示:
canLoad(route: Route): boolean {
return this.authService.isAdmin();
}
(isAdmin() 可以调用后端 API,返回当前用户的角色或类似的东西)
但这真的会阻止任何非管理员加载 AdminModule 吗?除非我误解,所有这些代码都位于客户端上,那么有什么可以阻止客户端修改“canLoad”方法使其始终返回true?像这样:
canLoad(route: Route): boolean {
return true;
}
因此允许客户端加载他们想要的任何模块。
显然,任何需要管理员身份的后端 API 调用都会受到保护,但似乎任何用户都可以查看管理员 UI,这对我来说有点奇怪。有人可以帮我解决这个问题吗?
【问题讨论】:
标签: angular authentication angular2-routing