首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个以上保护的路由器canActivateChild

一个以上保护的路由器canActivateChild
EN

Stack Overflow用户
提问于 2018-02-26 10:14:47
回答 1查看 669关注 0票数 1

我正在使用多个canActivateChild警卫,如下所示:

代码语言:javascript
复制
{path: 'admin', canActivateChild : [AdminAuthGuard, EmployeeAuthGuard], children: adminRoutes }

以下是管理警卫的定义:

代码语言:javascript
复制
canActivateChild() : boolean {
   const role = localStorage.getItem('role');
   if(role === 'admin') {
     return true;
   }
   else {
     return false;
   }
}

我有非常类似的员工警卫,我正在检查作为雇员的角色。上述代码的问题是:

  1. 如果我的第一个守卫返回错误,第二个守卫根本没有被执行。
  2. 如果我的第一个守卫返回真,我的第二个守卫返回假。这条路线当时也失败了。

注意:我的守卫是同步的,但我仍然面临着这个问题。请告诉我怎么解决这个问题?

实际代码要比这复杂得多。这只是一个获得帮助的示例代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-26 10:27:52

在检查两个返回值的其他两个警卫之外创建一个组合保护:

代码语言:javascript
复制
class CombinedGuard {
  constructor(private adminGuard: AdminAuthGuard, private employeeGuard: EmployeeAuthGuard) {}

  canActivate(r, s) {
        // defined your order logic here, this is a simple AND
        return this.adminGuard.canActivate(r, s) && this.employeeGuard.canActivate(r,s)
  }
}

然后在路由中使用该CombinedGuard:

代码语言:javascript
复制
{path: 'admin', canActivateChild : [CombinedGuard], children: adminRoutes }

How to wait for guards in Angular启发

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48986026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档