diff --git a/npm/ng-packs/packages/core/src/lib/models/utility.ts b/npm/ng-packs/packages/core/src/lib/models/utility.ts index f1cfbdb6da..a8ff45e319 100644 --- a/npm/ng-packs/packages/core/src/lib/models/utility.ts +++ b/npm/ng-packs/packages/core/src/lib/models/utility.ts @@ -1,13 +1,21 @@ +/* tslint:disable:ban-types */ import { TemplateRef, Type } from '@angular/core'; -export type DeepPartial = { - [P in keyof T]?: T[P] extends Serializable ? DeepPartial : T[P]; -}; +export type DeepPartial = Partible extends never + ? T + : { + [K in keyof T]?: DeepPartial; + }; -type Serializable = Record< - string | number | symbol, - string | number | boolean | Record ->; +type Partible = T extends Primitive | Array + ? never + : { + [K in keyof T]: T[K] extends Function ? never : T[K]; + } extends T + ? T + : never; + +export type Primitive = undefined | null | boolean | string | number | bigint | symbol; export type InferredInstanceOf = T extends Type ? U : never; export type InferredContextOf = T extends TemplateRef ? U : never; 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 c89949b064..c549c5a7a8 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 @@ -6,7 +6,7 @@ import { ConfigStateService } from './config-state.service'; @Injectable({ providedIn: 'root' }) export class PermissionService { - constructor(private configState: ConfigStateService) {} + constructor(protected configState: ConfigStateService) {} getGrantedPolicy$(key: string) { return this.getStream().pipe( @@ -19,7 +19,7 @@ export class PermissionService { return this.isPolicyGranted(key, policies); } - private isPolicyGranted(key: string, grantedPolicies: Record) { + protected isPolicyGranted(key: string, grantedPolicies: Record) { if (!key) return true; const orRegexp = /\|\|/g; @@ -43,19 +43,19 @@ export class PermissionService { return this.getPolicy(key, grantedPolicies); } - private getStream() { + protected getStream() { return this.configState.getAll$().pipe(map(this.mapToPolicies)); } - private getSnapshot() { + protected getSnapshot() { return this.mapToPolicies(this.configState.getAll()); } - private mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) { - return snq(() => applicationConfiguration.auth.grantedPolicies); + protected mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) { + return snq(() => applicationConfiguration.auth.grantedPolicies, {}); } - private getPolicy(key: string, grantedPolicies: Record) { + protected getPolicy(key: string, grantedPolicies: Record) { return snq(() => grantedPolicies[key], false); } } diff --git a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts index ea4af9ddfb..27a8e9cbcf 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts @@ -33,7 +33,7 @@ export class InternalStore { } this.state$.next(patchedState); - this.update$.next(patchedState); + this.update$.next(patchedState as DeepPartial); } deepPatch(state: DeepPartial) { @@ -43,7 +43,7 @@ export class InternalStore { set(state: State) { this.state$.next(state); - this.update$.next(state); + this.update$.next(state as DeepPartial); } reset() { diff --git a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts index 7fa32a1b89..adfbaca816 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts @@ -4,6 +4,7 @@ import { coreOptionsFactory, CORE_OPTIONS, LIST_QUERY_DEBOUNCE_TIME, + PermissionService, RestService, } from '@abp/ng.core'; import { APP_BASE_HREF } from '@angular/common'; @@ -11,6 +12,7 @@ import { ModuleWithProviders, NgModule } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { provideRoutes } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; +import { MockPermissionService } from './services/mock-permission.service'; import { MockRestService } from './services/mock-rest.service'; /** @@ -42,6 +44,10 @@ export class CoreTestingModule { provide: LIST_QUERY_DEBOUNCE_TIME, useValue: listQueryDebounceTime, }, + { + provide: PermissionService, + useClass: MockPermissionService, + }, { provide: RestService, useClass: MockRestService, diff --git a/npm/ng-packs/packages/core/testing/src/lib/services/index.ts b/npm/ng-packs/packages/core/testing/src/lib/services/index.ts index 24206d7c5d..128750c0bc 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/services/index.ts @@ -1 +1,2 @@ +export * from './mock-permission.service'; export * from './mock-rest.service'; diff --git a/npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts b/npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts new file mode 100644 index 0000000000..81bbdcc625 --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts @@ -0,0 +1,34 @@ +import { ConfigStateService, PermissionService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class MockPermissionService extends PermissionService { + constructor(protected configState: ConfigStateService) { + super(configState); + this.grantAllPolicies(); + } + + grantAllPolicies() { + const grantedPolicies = new Proxy( + {}, + { + get() { + return true; + }, + }, + ); + + this.configState['store'].deepPatch({ auth: { grantedPolicies } }); + } + + grantPolicies(keys: string[]) { + const grantedPolicies = keys.reduce((policies, key) => { + policies[key] = true; + return policies; + }, {}); + + this.configState['store'].deepPatch({ auth: { grantedPolicies } }); + } +} diff --git a/npm/ng-packs/packages/core/testing/src/public-api.ts b/npm/ng-packs/packages/core/testing/src/public-api.ts index 3b48853680..bf95ae9ece 100644 --- a/npm/ng-packs/packages/core/testing/src/public-api.ts +++ b/npm/ng-packs/packages/core/testing/src/public-api.ts @@ -1 +1,2 @@ export * from './lib/core-testing.module'; +export * from './lib/services';