diff --git a/npm/ng-packs/packages/core/src/lib/models/common.ts b/npm/ng-packs/packages/core/src/lib/models/common.ts index d4d44faae0..db03b1cea7 100644 --- a/npm/ng-packs/packages/core/src/lib/models/common.ts +++ b/npm/ng-packs/packages/core/src/lib/models/common.ts @@ -12,6 +12,10 @@ export namespace ABP { sendNullsAsQueryParam?: boolean; } + export interface HasPolicy { + requiredPolicy?: string; + } + export interface Test extends Partial { baseHref?: string; listQueryDebounceTime?: number; diff --git a/npm/ng-packs/packages/core/src/lib/services/permission.service.ts b/npm/ng-packs/packages/core/src/lib/services/permission.service.ts index af6a8e3d46..b47c29ed61 100644 --- a/npm/ng-packs/packages/core/src/lib/services/permission.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/permission.service.ts @@ -3,6 +3,7 @@ import { map } from 'rxjs/operators'; import snq from 'snq'; import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; import { ConfigStateService } from './config-state.service'; +import { ABP } from '../models'; @Injectable({ providedIn: 'root' }) export class PermissionService { @@ -19,14 +20,20 @@ export class PermissionService { return this.isPolicyGranted(key, policies); } - filterGrantedPolicies(policyKeys: Array) { + filterItemsByPolicy(items: Array) { const policies = this.getSnapshot(); - return policyKeys.filter(key => this.isPolicyGranted(key, policies)); + return items.filter( + item => !item.requiredPolicy || this.isPolicyGranted(item.requiredPolicy, policies), + ); } - filterGrantedPolicies$(policyKeys: Array) { + filterItemsByPolicy$(items: Array) { return this.getStream().pipe( - map(policies => policyKeys.filter(key => this.isPolicyGranted(key, policies))), + map(policies => + items.filter( + item => !item.requiredPolicy || this.isPolicyGranted(item.requiredPolicy, policies), + ), + ), ); }