@ -19,7 +19,7 @@ import {
import { LocaleDirection } from '@abp/ng.theme.shared';
import { LocaleDirection } from '@abp/ng.theme.shared';
import {
import {
Component,
Component,
EventEmitter, Inject, Input, Optional, Output, TrackByFunction
EventEmitter, Inject, inject, Input, Optional, Output, TrackByFunction
} from '@angular/core';
} from '@angular/core';
import { of } from 'rxjs';
import { of } from 'rxjs';
import { finalize, switchMap, tap } from 'rxjs/operators';
import { finalize, switchMap, tap } from 'rxjs/operators';
@ -42,16 +42,18 @@ type PermissionWithStyle = PermissionGrantInfoDto & {
})
})
export class PermissionManagementComponent
export class PermissionManagementComponent
implements
implements
PermissionManagement.PermissionManagementComponentInputs,
PermissionManagement.PermissionManagementComponentInputs,
PermissionManagement.PermissionManagementComponentOutputs {
PermissionManagement.PermissionManagementComponentOutputs {
private readonly service = inject(PermissionsService);
private readonly configState = inject(ConfigStateService);
protected _providerName: string;
protected _providerName: string;
@Input ()
@Input ()
get providerName(): string {
get providerName(): string {
if (this.replaceableData) return this.replaceableData.inputs.providerName;
if (this.replaceableData) return this.replaceableData.inputs.providerName;
return this._providerName;
return this._providerName;
}
}
set providerName(value: string) {
set providerName(value: string) {
this._providerName = value;
this._providerName = value;
}
}
@ -60,10 +62,8 @@ export class PermissionManagementComponent
@Input ()
@Input ()
get providerKey(): string {
get providerKey(): string {
if (this.replaceableData) return this.replaceableData.inputs.providerKey;
if (this.replaceableData) return this.replaceableData.inputs.providerKey;
return this._providerKey;
return this._providerKey;
}
}
set providerKey(value: string) {
set providerKey(value: string) {
this._providerKey = value;
this._providerKey = value;
}
}
@ -72,10 +72,8 @@ export class PermissionManagementComponent
@Input ()
@Input ()
get hideBadges(): boolean {
get hideBadges(): boolean {
if (this.replaceableData) return this.replaceableData.inputs.hideBadges;
if (this.replaceableData) return this.replaceableData.inputs.hideBadges;
return this._hideBadges;
return this._hideBadges;
}
}
set hideBadges(value: boolean) {
set hideBadges(value: boolean) {
this._hideBadges = value;
this._hideBadges = value;
}
}
@ -85,7 +83,6 @@ export class PermissionManagementComponent
get visible(): boolean {
get visible(): boolean {
return this._visible;
return this._visible;
}
}
set visible(value: boolean) {
set visible(value: boolean) {
if (value === this._visible) return;
if (value === this._visible) return;
@ -106,15 +103,10 @@ export class PermissionManagementComponent
@Output () readonly visibleChange = new EventEmitter< boolean > ();
@Output () readonly visibleChange = new EventEmitter< boolean > ();
data: GetPermissionListResultDto = { groups: [], entityDisplayName: null };
data: GetPermissionListResultDto = { groups: [], entityDisplayName: null };
selectedGroup: PermissionGroupDto;
selectedGroup: PermissionGroupDto;
permissions: PermissionGrantInfoDto[] = [];
permissions: PermissionGrantInfoDto[] = [];
selectThisTab = false;
selectThisTab = false;
selectAllTab = false;
selectAllTab = false;
modalBusy = false;
modalBusy = false;
trackByFn: TrackByFunction< PermissionGroupDto > = (_, item) => item.name;
trackByFn: TrackByFunction< PermissionGroupDto > = (_, item) => item.name;
@ -142,7 +134,6 @@ export class PermissionManagementComponent
get isVisible(): boolean {
get isVisible(): boolean {
if (!this.replaceableData) return this.visible;
if (!this.replaceableData) return this.visible;
return this.replaceableData.inputs.visible;
return this.replaceableData.inputs.visible;
}
}
@ -152,9 +143,7 @@ export class PermissionManagementComponent
public replaceableData: ReplaceableComponents.ReplaceableTemplateData<
public replaceableData: ReplaceableComponents.ReplaceableTemplateData<
PermissionManagement.PermissionManagementComponentInputs,
PermissionManagement.PermissionManagementComponentInputs,
PermissionManagement.PermissionManagementComponentOutputs
PermissionManagement.PermissionManagementComponentOutputs
>,
>
private service: PermissionsService,
private configState: ConfigStateService
) {}
) {}
getChecked(name: string) {
getChecked(name: string) {
@ -162,17 +151,11 @@ export class PermissionManagementComponent
}
}
isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {
isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {
if (grantedProviders.length) {
return grantedProviders?.some(p => p.providerName !== this.providerName);
return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;
}
return false;
}
}
onClickCheckbox(clickedPermission: PermissionGrantInfoDto, value) {
onClickCheckbox(clickedPermission: PermissionGrantInfoDto, value) {
if (
if (clickedPermission.isGranted & & this.isGrantedByOtherProviderName(clickedPermission.grantedProviders))
clickedPermission.isGranted & &
this.isGrantedByOtherProviderName(clickedPermission.grantedProviders)
)
return;
return;
setTimeout(() => {
setTimeout(() => {
@ -184,7 +167,6 @@ export class PermissionManagementComponent
} else if (clickedPermission.parentName === per.name & & !clickedPermission.isGranted) {
} else if (clickedPermission.parentName === per.name & & !clickedPermission.isGranted) {
return { ...per, isGranted: true };
return { ...per, isGranted: true };
}
}
return per;
return per;
});
});
@ -255,16 +237,11 @@ export class PermissionManagementComponent
this.setTabCheckboxState();
this.setTabCheckboxState();
}
}
submit() {
submit() {
const unchangedPermissions = getPermissions(this.data.groups);
const unchangedPermissions = getPermissions(this.data.groups);
const changedPermissions: UpdatePermissionDto[] = this.permissions
const changedPermissions: UpdatePermissionDto[] = this.permissions
.filter(per =>
.filter(per =>
unchangedPermissions.find(unchanged => unchanged.name === per.name).isGranted ===
unchangedPermissions.find(unchanged => unchanged.name === per.name).isGranted !== per.isGranted
per.isGranted
? false
: true,
)
)
.map(({ name, isGranted }) => ({ name, isGranted }));
.map(({ name, isGranted }) => ({ name, isGranted }));
@ -321,26 +298,23 @@ export class PermissionManagementComponent
this.replaceableData.outputs.visibleChange(visible);
this.replaceableData.outputs.visibleChange(visible);
}
}
}
}
shouldFetchAppConfig() {
shouldFetchAppConfig() {
const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;
const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;
if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);
if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);
if (this.providerName === 'U') return currentUser.id === this.providerKey;
if (this.providerName === 'U') return currentUser.id === this.providerKey;
return false;
return false;
}
}
}
}
function findMargin(permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto) {
function findMargin(permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto): number {
const parentPermission = permissions.find(per => per.name === permission.parentName);
const parentPermission = permissions.find(per => per.name === permission.parentName);
if (parentPermission & & parentPermission.parentName) {
if (parentPermission & & parentPermission.parentName) {
let margin = 20;
let margin = 20;
return ( margin += findMargin(permissions, parentPermission) );
return margin + findMargin(permissions, parentPermission);
}
}
return parentPermission ? 20 : 0;
return parentPermission ? 20 : 0;
}
}
@ -461,12 +435,12 @@ Open `app.component.ts` in `src/app` folder and modify it as shown below:
```js
```js
import { ReplaceableComponentsService } from '@abp/ng.core';
import { ReplaceableComponentsService } from '@abp/ng.core';
import { ePermissionManagementComponents } from '@abp/ng.permission-management';
import { ePermissionManagementComponents } from '@abp/ng.permission-management';
import { Component, OnInit } from '@angular/core';
import { Component, OnInit, inject } from '@angular/core';
import { PermissionManagementComponent } from './permission-management/permission-management.component';
import { PermissionManagementComponent } from './permission-management/permission-management.component';
//...
//...
export class AppComponent implements OnInit {
export class AppComponent implements OnInit {
constructor(private replaceableComponents: ReplaceableComponentsService) {} // injected ReplaceableComponentsService
private readonly replaceableComponents = inject(ReplaceableComponentsService); // injected ReplaceableComponentsService
ngOnInit() {
ngOnInit() {
this.replaceableComponents.add({
this.replaceableComponents.add({