【发布时间】:2019-01-24 00:23:27
【问题描述】:
我正在 Angular 应用程序中处理 authz。我们大量使用路由,因此在路由守卫中检查授权似乎很有意义。
我在canActivateChild 路由中执行此操作,设置大致如下:
class MyGuard implements CanActivateChild {
canActivateChild(route, state) {
return !route.data || route.data.active;
}
}
const routes: Routes = [
{
path: '',
canActivate: [MyGuard],
canActivateChild: [MyGuard],
children: [
{
path: 'hello', component: HelloComponent, data: { active: false }
}
]
}
]
(这显然被大大简化了,但我认为我如何确定路由是否被授权的细节并不相关。更完整的工作示例在 StackBlitz 上https://stackblitz.com/edit/dv-so-angular-route-authz)
我的问题是,当授权失败时,路由守卫只让我做两件事:返回false 并完全取消导航并保持在原始路线上;或重定向到其他 URL。
我想要的 UI 显示一条错误消息,但在用户尝试导航到的 URL 下。 (即,如果这是设置权限的错误,用户更容易报告“嘿,我无法访问此 URL”,然后重新加载页面。)实际上,我希望服务器返回 HTTP 403 状态有身体。
我考虑过不对路线进行检查,而是让目标组件本身显示其他内容。不过,我并不是特别喜欢这个,如果没有其他原因它会干扰模块的按需加载。有没有一种“干净”的方法可以从路由器做到这一点?
【问题讨论】:
标签: angular typescript authorization