问题描述
在Angular 7应用中,我有一些页面,这些页面受实现canActivate方法的服务保护。
这可以正常工作,但是现在情况变得更加复杂:我具有基于特定数据的多个授权。此授权可以隐藏或显示某些页面,我可以通过gloabl过滤器栏中的选择更改此数据。我想做的是验证我更换过滤器时查看实际页面的能力。
这是一个示例:
我有两个页面:A和B。每个页面都需要授权“ auth”,因此我需要拥有authA才能看到页面A,而需要authB才能看到页面B。 对于正常的导航,canActivate可以检查auth,因为我可以在路线数据中进行设置。
我有一个过滤器(位于路由器外部,因此始终未定义ActivatedRoute),其中包含两个选项:Opt1和Opt2。 Opt1具有authA和authB,Opt2仅具有AuthA。 如果我使用Opt1进入Page B,我想在选择Opt2时验证我的身份验证,但是,当然,由于我尚未更改路线,canActivate无法做到这一点。
我决定在PageA和PageB组件上执行此操作,以检查ActivatedRoute和选定的Opt,但是我不喜欢这种解决方案,因为我更喜欢将这种类型的检查集中在一个组件中。而且,如果我有嵌套的组件,我不想多次执行相同的检查。
我正在尝试在过滤器组件上执行此检查,但是在那里我无法使用ActivatedRoute来检查请求的身份验证或实际路径。由于我必须检查Opt并检查页面,因此我最喜欢的解决方案应该是在没有canActivate防护的情况下执行过滤器组件上的所有操作。我已经尝试通过订阅router.events来做到这一点,但是我不明白我必须检查哪个事件以及如果无法访问该页面该如何更改重定向。
或者,即使当我更改过滤器时,也可以是模拟路线更改的一个不错的选择,这样,我可以使用canActivate防护。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)