Joe*_*oel 14 angular2-routing angular2-guards angular
canActivate在Angular2中配置路由时有没有办法设置"基础" ?因此,所有路由都由相同的基本检查覆盖,然后每个路由可以进行更细化的检查.
我有这样的AppModule路由:
@NgModule({
imports: [
RouterModule.forRoot([
{
path: '',
component: HomeComponent,
canActivate: [AuthenticationGuardService],
data: { roles: [Roles.User] }
}
])
],
exports: [
RouterModule
]
})
export class AppRoutingModule { }
Run Code Online (Sandbox Code Playgroud)
对于功能模块FeatureModule:
@NgModule({
imports: [
RouterModule.forChild([
{
path: "feature",
component: FeatureComponent,
// I'd like to avoid having to do this:
canActivate: [AuthenticationGuardService],
data: { roles: [Roles.User] }
}
])
],
exports: [
RouterModule
]
})
export class FeatureRoutingModule { }
Run Code Online (Sandbox Code Playgroud)
我AuthenticationGuardService通过使用中提供的角色检查用户是否可以访问路由data.
我能做些什么来避免设置canActivate和data我的所有功能,路由模块?我想canActivate为这个应用程序中的所有路由配置一个"基础" .
小智 7
const routes: Routes = [
{
path: '',
canActivate: [AuthGuard],
children: [
{ path: '', component: HomeComponent },
{ path: 'builds', component: BuildsComponent },
{ path: 'files', component: FilesComponent },
{ path: 'publications', component: PublicationsComponent }
]
},
{ path: 'login', component: LoginComponent },
{ path: '**', redirectTo: '' }
];
Run Code Online (Sandbox Code Playgroud)
我编写了一个解决方案,为我的应用程序的每个路由(包括由子模块定义的路由)动态添加Guard。
在阅读此路由器文档时,我已经找到了解决方案。
编辑
这是一个活着的StackBlitz示例。
const routes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'login', component: LoginComponent, data: { skipGuard: true } },
{ path: '403', component: ForbiddenComponent, data: { skipGuard: true } },
{ path: '**', component: NotFoundComponent, data: { skipGuard: true } }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: []
})
export class AppRoutingModule {
constructor(router: Router) {
router.config
.filter(route => !route.data || !route.data.skipGuard)
.forEach(route => this.addGuard(route));
}
private addGuard(route: Route): void {
route.canActivate = route.canActivate ?
[AuthGuard].concat(route.canActivate) : [AuthGuard];
route.canActivateChild = route.canActivate ?
[AuthGuard].concat(route.canActivate) : [AuthGuard];
}
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5559 次 |
| 最近记录: |