深层链接上的 pre-CanActivate 或 pre-CanLoad
pre-CanActivate or pre-CanLoad on deep links
我的任务是用 Angular 应用程序替换 ColdFusion 11 后端上现有的 Adobe Flash 和 Flex 应用程序 运行。
假设用户在访问 Angular 应用程序页面之前就已登录并已经进行了会话,并且我不允许用户请求新的登录,或让他们点击其他链接以使他们的深层链接起作用。
我创建了一个会话服务,它成功获取了 Coldfusion 会话变量并将它们存储在会话模型中。
我的意图是,基于现有的应用程序架构,我们将实现功能模块的延迟加载。
我的问题在于我需要从 ColdFusion 会话中获取数据以验证用户是否有权在我尝试加载该功能之前甚至查看该功能,并且由于 99% 或更多,的访问将来自功能模块的深层链接,但不能保证会调用会话服务。
在事件序列中,路由解析器似乎出现在路由守卫之后,因此我正在努力解决如何确保 CanLoad 守卫能够访问从 SessionService 成功加载的会话模型的问题。
编辑:以下说明....
canLoad 取决于会话和权限级别的值,必须根据他们要访问的页面检查这些值。
例如....深层链接页面是查看有关某个单元的详细信息的页面
http://url/app/feature/childFeature?unitId=123&orderId=456
会话用户需要分配给那个特定的 unitId,并且必须具有对该 childFeature 的查看权限,该子特征在数据库 table 中定义
所以,我需要在 canLoad 守卫上知道 URL 参数 'unitId',我不相信我可以在 Route 上访问它???然后我需要对 viewAccess 权限检查的结果和 return 作为 canLoad.
的结果进行逻辑与运算
有指导吗?
提前致谢!
你可以试试下面,
在您的 SessionService
中,创建一个主题,一旦您的会话模型加载完毕,该主题就会发出,
会话服务
sessionLoaded: Subject<boolean> = new Subject<boolean>();
somemethodAfterSessionisLoaded(){
....
this.sessionLoaded.next(true);
}
可以加载功能子模块
constructor(private sessionService: SessionService) {}
canLoad(route: Route): Observable<boolean>|Promise<boolean>|boolean {
return this.sessionService.sessionLoaded;
}
希望对您有所帮助!!
我的任务是用 Angular 应用程序替换 ColdFusion 11 后端上现有的 Adobe Flash 和 Flex 应用程序 运行。
假设用户在访问 Angular 应用程序页面之前就已登录并已经进行了会话,并且我不允许用户请求新的登录,或让他们点击其他链接以使他们的深层链接起作用。
我创建了一个会话服务,它成功获取了 Coldfusion 会话变量并将它们存储在会话模型中。
我的意图是,基于现有的应用程序架构,我们将实现功能模块的延迟加载。
我的问题在于我需要从 ColdFusion 会话中获取数据以验证用户是否有权在我尝试加载该功能之前甚至查看该功能,并且由于 99% 或更多,的访问将来自功能模块的深层链接,但不能保证会调用会话服务。
在事件序列中,路由解析器似乎出现在路由守卫之后,因此我正在努力解决如何确保 CanLoad 守卫能够访问从 SessionService 成功加载的会话模型的问题。
编辑:以下说明....
canLoad 取决于会话和权限级别的值,必须根据他们要访问的页面检查这些值。
例如....深层链接页面是查看有关某个单元的详细信息的页面
http://url/app/feature/childFeature?unitId=123&orderId=456
会话用户需要分配给那个特定的 unitId,并且必须具有对该 childFeature 的查看权限,该子特征在数据库 table 中定义
所以,我需要在 canLoad 守卫上知道 URL 参数 'unitId',我不相信我可以在 Route 上访问它???然后我需要对 viewAccess 权限检查的结果和 return 作为 canLoad.
的结果进行逻辑与运算有指导吗?
提前致谢!
你可以试试下面,
在您的 SessionService
中,创建一个主题,一旦您的会话模型加载完毕,该主题就会发出,
会话服务
sessionLoaded: Subject<boolean> = new Subject<boolean>();
somemethodAfterSessionisLoaded(){
....
this.sessionLoaded.next(true);
}
可以加载功能子模块
constructor(private sessionService: SessionService) {}
canLoad(route: Route): Observable<boolean>|Promise<boolean>|boolean {
return this.sessionService.sessionLoaded;
}
希望对您有所帮助!!