将CanActivate()委托给Component

时间:2018-01-05 14:26:16

标签: angular angular-routing

我的angular(4)应用程序中有数十个组件。

使用只能访问具有访问权限的人。

  • 例如,UserA可以访问DashboardComponent,但不能访问userB。

某些组件使用参数检查授权。

  • 例如,UserA可以使用参数1访问VisualizeComponent,但无法使用参数2访问。

有许多类型的Access授权或拒绝策略。

所以我想象一下每个组件的委托CanActivate方法,因为每个组件都是根据它的目的检查访问权限的最佳位置。

我知道人们通常会在下面的服务中实现CanActivate。

@Injectable()
export class AccessGuard implements CanActivate {
  canActivate(route: ActivatedRouteSnapshot, 
              state: RouterStateSnapshot) {

   route.component.canActivate(route, state); // <----- HERE

   return true;
  }
}

现在我可以在第6行调用一些方法吗? 我想将CanActivate实现到我的所有组件,并让他们在该方法中拥有自己的防护登录。所以我很容易将保护逻辑放在组件的业务逻辑上。

1 个答案:

答案 0 :(得分:-1)

  1. 尝试添加一些必须存储有关访问参数的信息的sessionService,添加一个关于授予访问逻辑的方法。
  2. 添加适当的方法

    @Injectable()
    export class AccessGuard implements CanActivate { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    constructor(private sessionService:SessionService) {}
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        return this.sessionService:SessionService.isAuthenticated();
    }}}
    
    1. 对于组件和页面,例如添加路由器配置 {path:'dashboard-page,component:DashboardComponent,canActivate:[AuthenticationGuard]},
  3. 我希望它会有所帮助