Browse Source

add: hierarchical check for permission selection

pull/20598/head
sumeyyeKurtulus 2 years ago
parent
commit
ae0fe6cbb4
  1. 34
      npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts

34
npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts

@ -195,13 +195,13 @@ export class PermissionManagementComponent
}, 0); }, 0);
} }
setParentClicked(clickedPermissions: PermissionGrantInfoDto) { setParentClicked(clickedPermission: PermissionGrantInfoDto) {
let childPermissionGrantedCount = 0; let childPermissionGrantedCount = 0;
let parentPermission: PermissionGrantInfoDto; let parentPermission: PermissionGrantInfoDto;
if (clickedPermissions.parentName) { if (clickedPermission.parentName) {
this.permissions.forEach(per => { this.permissions.forEach(per => {
if (per.name === clickedPermissions.parentName) { if (per.name === clickedPermission.parentName) {
parentPermission = per; parentPermission = per;
} }
}); });
@ -220,9 +220,11 @@ export class PermissionManagementComponent
} }
return; return;
} }
this.permissions = this.permissions.map(per => { this.permissions = this.permissions.map(per => {
if (per.parentName === clickedPermissions.name) { const root = findRootParent(this.permissions, per);
per.isGranted = false; if (root && root.name === clickedPermission.name) {
per.isGranted = root.isGranted;
} }
return per; return per;
}); });
@ -387,6 +389,28 @@ export class PermissionManagementComponent
} }
} }
function findRootParent(
permissions: PermissionGrantInfoDto[],
permission: PermissionGrantInfoDto,
): PermissionGrantInfoDto | null {
if (!permissions.length) {
return null;
}
const permissionMap = new Map(permissions.map(p => [p.name, p]));
let currentPermission = permissionMap.get(permission.name) ?? null;
while (currentPermission && currentPermission.parentName) {
const parentPermission = permissionMap.get(currentPermission.parentName);
if (!parentPermission) {
break;
}
currentPermission = parentPermission;
}
return currentPermission;
}
function findMargin( function findMargin(
permissions: PermissionGrantInfoDto[], permissions: PermissionGrantInfoDto[],
permission: PermissionGrantInfoDto, permission: PermissionGrantInfoDto,

Loading…
Cancel
Save