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);
}
setParentClicked(clickedPermissions: PermissionGrantInfoDto) {
setParentClicked(clickedPermission: PermissionGrantInfoDto) {
let childPermissionGrantedCount = 0;
let parentPermission: PermissionGrantInfoDto;
if (clickedPermissions.parentName) {
if (clickedPermission.parentName) {
this.permissions.forEach(per => {
if (per.name === clickedPermissions.parentName) {
if (per.name === clickedPermission.parentName) {
parentPermission = per;
}
});
@ -220,9 +220,11 @@ export class PermissionManagementComponent
}
return;
}
this.permissions = this.permissions.map(per => {
if (per.parentName === clickedPermissions.name) {
per.isGranted = false;
const root = findRootParent(this.permissions, per);
if (root && root.name === clickedPermission.name) {
per.isGranted = root.isGranted;
}
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(
permissions: PermissionGrantInfoDto[],
permission: PermissionGrantInfoDto,

Loading…
Cancel
Save