From a3d751f482d4ca4ab9b8a23896b789479376e820 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 26 Nov 2019 17:59:23 +0300 Subject: [PATCH] feat(core): support to find requiredPolicy from child route --- .../packages/core/src/lib/guards/permission.guard.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts index 97c6c3ebc8..22d3e91414 100644 --- a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts +++ b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router'; import { Store } from '@ngxs/store'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; @@ -13,8 +13,14 @@ import { ConfigState } from '../states'; export class PermissionGuard implements CanActivate { constructor(private store: Store) {} - canActivate({ data }: ActivatedRouteSnapshot): Observable { - const resource = snq(() => data.routes.requiredPolicy) || (data.requiredPolicy as string); + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + let resource = snq(() => route.data.routes.requiredPolicy) || (route.data.requiredPolicy as string); + if (!resource) { + resource = snq( + () => route.routeConfig.children.find(child => state.url.indexOf(child.path) > -1).data.requiredPolicy, + ); + } + return this.store.select(ConfigState.getGrantedPolicy(resource)).pipe( tap(access => { if (!access) {