mirror of https://github.com/abpframework/abp.git
23 changed files with 20 additions and 216 deletions
@ -1 +0,0 @@ |
|||
export * from './permission-management.actions'; |
|||
@ -1,11 +0,0 @@ |
|||
import { ProviderInfoDto, UpdatePermissionsDto } from '../proxy/models'; |
|||
|
|||
export class GetPermissions { |
|||
static readonly type = '[PermissionManagement] Get Permissions'; |
|||
constructor(public payload: ProviderInfoDto) {} |
|||
} |
|||
|
|||
export class UpdatePermissions { |
|||
static readonly type = '[PermissionManagement] Update Permissions'; |
|||
constructor(public payload: ProviderInfoDto & UpdatePermissionsDto) {} |
|||
} |
|||
@ -1,13 +1,11 @@ |
|||
import { CoreModule } from '@abp/ng.core'; |
|||
import { ThemeSharedModule } from '@abp/ng.theme.shared'; |
|||
import { NgModule } from '@angular/core'; |
|||
import { NgxsModule } from '@ngxs/store'; |
|||
import { PermissionManagementComponent } from './components/permission-management.component'; |
|||
import { PermissionManagementState } from './states/permission-management.state'; |
|||
|
|||
@NgModule({ |
|||
declarations: [PermissionManagementComponent], |
|||
imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([PermissionManagementState])], |
|||
imports: [CoreModule, ThemeSharedModule], |
|||
exports: [PermissionManagementComponent], |
|||
}) |
|||
export class PermissionManagementModule {} |
|||
|
|||
@ -1 +0,0 @@ |
|||
export * from './permission-management-state.service'; |
|||
@ -1,27 +0,0 @@ |
|||
import { Injectable } from '@angular/core'; |
|||
import { Store } from '@ngxs/store'; |
|||
import { PermissionManagementState } from '../states/permission-management.state'; |
|||
import { PermissionManagement } from '../models'; |
|||
import { GetPermissions, UpdatePermissions } from '../actions'; |
|||
|
|||
@Injectable({ |
|||
providedIn: 'root', |
|||
}) |
|||
export class PermissionManagementStateService { |
|||
constructor(private store: Store) {} |
|||
|
|||
getPermissionGroups() { |
|||
return this.store.selectSnapshot(PermissionManagementState.getPermissionGroups); |
|||
} |
|||
getEntityDisplayName() { |
|||
return this.store.selectSnapshot(PermissionManagementState.getEntityDisplayName); |
|||
} |
|||
|
|||
dispatchGetPermissions(...args: ConstructorParameters<typeof GetPermissions>) { |
|||
return this.store.dispatch(new GetPermissions(...args)); |
|||
} |
|||
|
|||
dispatchUpdatePermissions(...args: ConstructorParameters<typeof UpdatePermissions>) { |
|||
return this.store.dispatch(new UpdatePermissions(...args)); |
|||
} |
|||
} |
|||
@ -1 +0,0 @@ |
|||
export * from './permission-management.state'; |
|||
@ -1,47 +0,0 @@ |
|||
import { Injectable } from '@angular/core'; |
|||
import { Action, Selector, State, StateContext } from '@ngxs/store'; |
|||
import { tap } from 'rxjs/operators'; |
|||
import { GetPermissions, UpdatePermissions } from '../actions/permission-management.actions'; |
|||
import { PermissionManagement } from '../models/permission-management'; |
|||
import { ProviderInfoDto } from '../proxy/models'; |
|||
import { PermissionsService } from '../proxy/permissions.service'; |
|||
|
|||
@State<PermissionManagement.State>({ |
|||
name: 'PermissionManagementState', |
|||
defaults: { permissionRes: {} } as PermissionManagement.State, |
|||
}) |
|||
@Injectable() |
|||
export class PermissionManagementState { |
|||
@Selector() |
|||
static getPermissionGroups({ permissionRes }: PermissionManagement.State) { |
|||
return permissionRes.groups || []; |
|||
} |
|||
|
|||
@Selector() |
|||
static getEntityDisplayName({ permissionRes }: PermissionManagement.State): string { |
|||
return permissionRes.entityDisplayName; |
|||
} |
|||
|
|||
constructor(private service: PermissionsService) {} |
|||
|
|||
@Action(GetPermissions) |
|||
permissionManagementGet( |
|||
{ patchState }: StateContext<PermissionManagement.State>, |
|||
{ payload: { providerKey, providerName } = {} as ProviderInfoDto }: GetPermissions, |
|||
) { |
|||
return this.service.get(providerName, providerKey).pipe( |
|||
tap(permissionResponse => |
|||
patchState({ |
|||
permissionRes: permissionResponse, |
|||
}), |
|||
), |
|||
); |
|||
} |
|||
|
|||
@Action(UpdatePermissions) |
|||
permissionManagementUpdate(_, { payload }: UpdatePermissions) { |
|||
return this.service.update(payload.providerName, payload.providerKey, { |
|||
permissions: payload.permissions, |
|||
}); |
|||
} |
|||
} |
|||
@ -1,60 +0,0 @@ |
|||
import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; |
|||
import { PermissionManagementStateService } from '../services/permission-management-state.service'; |
|||
import { PermissionManagementState } from '../states/permission-management.state'; |
|||
import { Store } from '@ngxs/store'; |
|||
import * as PermissionManagementActions from '../actions'; |
|||
|
|||
describe('PermissionManagementStateService', () => { |
|||
let service: PermissionManagementStateService; |
|||
let spectator: SpectatorService<PermissionManagementStateService>; |
|||
let store: SpyObject<Store>; |
|||
|
|||
const createService = createServiceFactory({ |
|||
service: PermissionManagementStateService, |
|||
mocks: [Store], |
|||
}); |
|||
beforeEach(() => { |
|||
spectator = createService(); |
|||
service = spectator.service; |
|||
store = spectator.inject(Store); |
|||
}); |
|||
test('should have the all PermissionManagementState static methods', () => { |
|||
const reg = /(?<=static )(.*)(?=\()/gm; |
|||
PermissionManagementState.toString() |
|||
.match(reg) |
|||
.forEach(fnName => { |
|||
expect(service[fnName]).toBeTruthy(); |
|||
|
|||
const spy = jest.spyOn(store, 'selectSnapshot'); |
|||
spy.mockClear(); |
|||
|
|||
const isDynamicSelector = PermissionManagementState[fnName].name !== 'memoized'; |
|||
|
|||
if (isDynamicSelector) { |
|||
PermissionManagementState[fnName] = jest.fn((...args) => args); |
|||
service[fnName]('test', 0, {}); |
|||
expect(PermissionManagementState[fnName]).toHaveBeenCalledWith('test', 0, {}); |
|||
} else { |
|||
service[fnName](); |
|||
expect(spy).toHaveBeenCalledWith(PermissionManagementState[fnName]); |
|||
} |
|||
}); |
|||
}); |
|||
|
|||
test('should have a dispatch method for every PermissionManagementState action', () => { |
|||
const reg = /(?<=dispatch)(\w+)(?=\()/gm; |
|||
PermissionManagementStateService.toString() |
|||
.match(reg) |
|||
.forEach(fnName => { |
|||
expect(PermissionManagementActions[fnName]).toBeTruthy(); |
|||
|
|||
const spy = jest.spyOn(store, 'dispatch'); |
|||
spy.mockClear(); |
|||
|
|||
const params = Array.from(new Array(PermissionManagementActions[fnName].length)); |
|||
|
|||
service[`dispatch${fnName}`](...params); |
|||
expect(spy).toHaveBeenCalledWith(new PermissionManagementActions[fnName](...params)); |
|||
}); |
|||
}); |
|||
}); |
|||
@ -1,12 +1,5 @@ |
|||
/* |
|||
* Public API Surface of permission-management |
|||
*/ |
|||
|
|||
export * from './lib/permission-management.module'; |
|||
export * from './lib/actions'; |
|||
export * from './lib/components'; |
|||
export * from './lib/enums/components'; |
|||
export * from './lib/models'; |
|||
export * from './lib/services'; |
|||
export * from './lib/states'; |
|||
export * from './lib/permission-management.module'; |
|||
export * from './lib/proxy'; |
|||
|
|||
Loading…
Reference in new issue