Browse Source

feat(core): support to find requiredPolicy from child route

pull/2261/head
mehmet-erim 7 years ago
parent
commit
a3d751f482
  1. 12
      npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts

12
npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate } from '@angular/router'; import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';
import { Store } from '@ngxs/store'; import { Store } from '@ngxs/store';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators'; import { tap } from 'rxjs/operators';
@ -13,8 +13,14 @@ import { ConfigState } from '../states';
export class PermissionGuard implements CanActivate { export class PermissionGuard implements CanActivate {
constructor(private store: Store) {} constructor(private store: Store) {}
canActivate({ data }: ActivatedRouteSnapshot): Observable<boolean> { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
const resource = snq(() => data.routes.requiredPolicy) || (data.requiredPolicy as string); 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( return this.store.select(ConfigState.getGrantedPolicy(resource)).pipe(
tap(access => { tap(access => {
if (!access) { if (!access) {

Loading…
Cancel
Save