From 854f3e5551224436e53de0ead6ae6936efd81df2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 15:37:03 +0300 Subject: [PATCH 1/4] refactor(core): get the required policy in PermissionGuard from RoutesService resolves #4662 --- .../core/src/lib/guards/permission.guard.ts | 33 +++++++++---------- .../core/src/lib/utils/route-utils.ts | 4 +-- 2 files changed, 18 insertions(+), 19 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 c4b70d0b7b..6ba6bd18b5 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,34 +1,33 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, Router } from '@angular/router'; import { Store } from '@ngxs/store'; import { Observable, of } from 'rxjs'; import { tap } from 'rxjs/operators'; import snq from 'snq'; -import { RestOccurError } from '../actions'; -import { ConfigState } from '../states'; +import { RestOccurError } from '../actions/rest.actions'; +import { ConfigState } from '../states/config.state'; +import { RoutesService } from '../services/routes.service'; +import { findRoute, getRoutePath } from '../utils/route-utils'; @Injectable({ providedIn: 'root', }) export class PermissionGuard implements CanActivate { - constructor(private store: Store) {} + constructor(private router: Router, private routes: RoutesService, private store: Store) {} - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { - let resource = - snq(() => route.data.routes.requiredPolicy) || snq(() => route.data.requiredPolicy as string); - if (!resource) { - resource = snq( - () => - route.routeConfig.children.find(child => state.url.indexOf(child.path) > -1).data - .requiredPolicy, - ); + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot, + ): Observable | boolean { + let { requiredPolicy } = route.data || {}; - if (!resource) { - return of(true); - } + if (!requiredPolicy) { + requiredPolicy = findRoute(this.routes, getRoutePath(this.router, state.url))?.requiredPolicy; + + if (!requiredPolicy) return true; } - return this.store.select(ConfigState.getGrantedPolicy(resource)).pipe( + return this.store.select(ConfigState.getGrantedPolicy(requiredPolicy)).pipe( tap(access => { if (!access) { this.store.dispatch(new RestOccurError({ status: 403 })); diff --git a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts index 57ffdd5285..5c98a929e7 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts @@ -17,9 +17,9 @@ export function findRoute(routes: RoutesService, path: string): TreeNode path).join('/'); } From b254f6dff2a1166ee333e663c3a5248fff757ea5 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 15:39:01 +0300 Subject: [PATCH 2/4] fix: localization problem in dynamic layout when language changed --- .../lib/components/dynamic-layout.component.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts index 49a0868967..bd09876ba6 100644 --- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts @@ -1,9 +1,10 @@ -import { Component, Injector, OnDestroy, Type, Optional, SkipSelf } from '@angular/core'; +import { Component, Injector, OnDestroy, Optional, SkipSelf, Type } from '@angular/core'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; import { Store } from '@ngxs/store'; import { eLayoutType } from '../enums/common'; import { ABP } from '../models'; import { ReplaceableComponents } from '../models/replaceable-components'; +import { LocalizationService } from '../services/localization.service'; import { RoutesService } from '../services/routes.service'; import { ReplaceableComponentsState } from '../states/replaceable-components.state'; import { findRoute, getRoutePath } from '../utils/route-utils'; @@ -16,15 +17,18 @@ import { TreeNode } from '../utils/tree-utils'; `, }) export class DynamicLayoutComponent implements OnDestroy { layout: Type; + isLayoutShow = true; + constructor( injector: Injector, + private localizationService: LocalizationService, private store: Store, @Optional() @SkipSelf() dynamicLayoutComponent: DynamicLayoutComponent, ) { @@ -61,6 +65,15 @@ export class DynamicLayoutComponent implements OnDestroy { this.layout = layouts[expectedLayout].component; } }); + + this.listenToLanguageChange(); + } + + private listenToLanguageChange() { + this.localizationService.languageChange.pipe(takeUntilDestroy(this)).subscribe(() => { + this.isLayoutShow = false; + setTimeout(() => (this.isLayoutShow = true), 0); + }); } private getComponent(key: string): ReplaceableComponents.ReplaceableComponent { From caa822ed6f0e7023b86d16e3d2644350b9db609a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Tue, 7 Jul 2020 15:45:00 +0300 Subject: [PATCH 3/4] style: replace isLayoutShow with isLayoutVisible --- .../core/src/lib/components/dynamic-layout.component.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts index bd09876ba6..2548cfece6 100644 --- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts @@ -17,14 +17,14 @@ import { TreeNode } from '../utils/tree-utils'; `, }) export class DynamicLayoutComponent implements OnDestroy { layout: Type; - isLayoutShow = true; + isLayoutVisible = true; constructor( injector: Injector, @@ -71,8 +71,8 @@ export class DynamicLayoutComponent implements OnDestroy { private listenToLanguageChange() { this.localizationService.languageChange.pipe(takeUntilDestroy(this)).subscribe(() => { - this.isLayoutShow = false; - setTimeout(() => (this.isLayoutShow = true), 0); + this.isLayoutVisible = false; + setTimeout(() => (this.isLayoutVisible = true), 0); }); } From a5a641fb71d4492708e7afde86f5ad6b3d747e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Tue, 7 Jul 2020 15:48:19 +0300 Subject: [PATCH 4/4] refactor: use default value for url paramater --- npm/ng-packs/packages/core/src/lib/utils/route-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts index 5c98a929e7..a749090695 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts @@ -17,9 +17,9 @@ export function findRoute(routes: RoutesService, path: string): TreeNode path).join('/'); }