CanLoad guard 是否可以在 Electron 应用程序中使用?
Is CanLoad guard usable within Electron application?
我拥有来自 BE 的 DTO 权限,它确定用户可以访问的应用程序部分。
使用 NgRx 选择器我想在 CanLoad 守卫中使用它,但我无法让它工作。
routes.ts
{
path: 'acquisition',
canLoad: [AcquisitionGuard],
loadChildren: () => import('./acquisition/acquisition.module').then(m => m.AcquisitionModule),
pathMatch: 'full',
},
门卫:
canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {
console.log('canLoad guard'); //never fires
return this.store.select(fromPermission.canAcess);
}
出于某种原因,这个守卫永远不会开火(用 console.log
和 debugger
试过)。当我将其更改为 canActive
并在 'parent' 路由文件中执行时,它也不会触发。它唯一一次触发是当我将它更改为 canActive
并将其移动到 'child' routes.file
收购.routes.ts
{
path: 'acquisition',
canActive: [AcquisitionGuard], //This is the only time I'll get some response from the guard
component: AcquisitionComponent,
children: [...],
},
编辑:
看起来这是因为一旦模块被加载 'CanLoad' 守卫就不会再次被触发。 Electron 是否可能一次加载所有内容,因此无法调用此守卫?
您可以将获取路由定义为模块中的子项,并添加 canActivateChild
来处理此模块所有路由的保护。
// acquisition.module.ts
const acquisitionRoutes: Routes = [
{
path: '',
canActivate: [AuthGuard],
canActivateChild: [AuthGuard],
children: [
...
]
},
];
// app.routing.ts
{
path: 'acquisition',
loadChildren: () => import('./acquisition/acquisition.module').then(m => m.AcquisitionModule),
pathMatch: 'full',
};
查看此答案:
我拥有来自 BE 的 DTO 权限,它确定用户可以访问的应用程序部分。 使用 NgRx 选择器我想在 CanLoad 守卫中使用它,但我无法让它工作。
routes.ts
{
path: 'acquisition',
canLoad: [AcquisitionGuard],
loadChildren: () => import('./acquisition/acquisition.module').then(m => m.AcquisitionModule),
pathMatch: 'full',
},
门卫:
canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {
console.log('canLoad guard'); //never fires
return this.store.select(fromPermission.canAcess);
}
出于某种原因,这个守卫永远不会开火(用 console.log
和 debugger
试过)。当我将其更改为 canActive
并在 'parent' 路由文件中执行时,它也不会触发。它唯一一次触发是当我将它更改为 canActive
并将其移动到 'child' routes.file
收购.routes.ts
{
path: 'acquisition',
canActive: [AcquisitionGuard], //This is the only time I'll get some response from the guard
component: AcquisitionComponent,
children: [...],
},
编辑: 看起来这是因为一旦模块被加载 'CanLoad' 守卫就不会再次被触发。 Electron 是否可能一次加载所有内容,因此无法调用此守卫?
您可以将获取路由定义为模块中的子项,并添加 canActivateChild
来处理此模块所有路由的保护。
// acquisition.module.ts
const acquisitionRoutes: Routes = [
{
path: '',
canActivate: [AuthGuard],
canActivateChild: [AuthGuard],
children: [
...
]
},
];
// app.routing.ts
{
path: 'acquisition',
loadChildren: () => import('./acquisition/acquisition.module').then(m => m.AcquisitionModule),
pathMatch: 'full',
};
查看此答案: