From 8becd973973882baf5aca378b2b215a670bf1cbb Mon Sep 17 00:00:00 2001 From: sumeyyeKurtulus Date: Tue, 27 Aug 2024 08:55:54 +0300 Subject: [PATCH] =?UTF-8?q?update:=20permission=20selection=20rules=20are?= =?UTF-8?q?=20met=20=F0=9F=99=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../permission-management.component.ts | 64 +++++++++++-------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts index 4ea265fc7e..cabc903d95 100644 --- a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts +++ b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts @@ -196,25 +196,19 @@ export class PermissionManagementComponent } setParentClicked(clickedPermission: PermissionGrantInfoDto) { - let childPermissionGrantedCount = 0; - let parentPermission: PermissionGrantInfoDto; + const parentPermissions: PermissionGrantInfoDto[] = findAllParentPermissions( + this.permissions, + clickedPermission, + ); if (clickedPermission.parentName) { - this.permissions.forEach(per => { - if (per.name === clickedPermission.parentName) { - parentPermission = per; - } - }); - this.permissions.forEach(per => { - if (parentPermission.name === per.parentName) { - per.isGranted && childPermissionGrantedCount++; - } - }); - if (childPermissionGrantedCount === 1 && !parentPermission.isGranted) { + if (parentPermissions.length) { this.permissions = this.permissions.map(per => { - if (per.name === parentPermission.name) { - per.isGranted = true; - } + parentPermissions.forEach(parent => { + if (per.name === parent.name) { + per.isGranted = true; + } + }); return per; }); } @@ -223,8 +217,10 @@ export class PermissionManagementComponent this.permissions = this.permissions.map(per => { const root = findRootParent(this.permissions, per); - if (root && root.name === clickedPermission.name) { - per.isGranted = root.isGranted; + if (root) { + if (root.name === clickedPermission.name && !root.isGranted) { + per.isGranted = false; + } } return per; }); @@ -389,26 +385,44 @@ export class PermissionManagementComponent } } -function findRootParent( +function traverseParentPermissions( permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto, -): PermissionGrantInfoDto | null { - if (!permissions.length) { - return null; - } - + collectAll = false, +): PermissionGrantInfoDto[] { const permissionMap = new Map(permissions.map(p => [p.name, p])); let currentPermission = permissionMap.get(permission.name) ?? null; + const parentPermissions: PermissionGrantInfoDto[] = []; while (currentPermission && currentPermission.parentName) { const parentPermission = permissionMap.get(currentPermission.parentName); if (!parentPermission) { break; } + parentPermissions.push(parentPermission); currentPermission = parentPermission; + + if (!collectAll) { + break; + } } - return currentPermission; + return parentPermissions; +} + +function findRootParent( + permissions: PermissionGrantInfoDto[], + permission: PermissionGrantInfoDto, +): PermissionGrantInfoDto | null { + const parentPermissions = traverseParentPermissions(permissions, permission); + return parentPermissions.length ? parentPermissions[parentPermissions.length - 1] : null; +} + +function findAllParentPermissions( + permissions: PermissionGrantInfoDto[], + permission: PermissionGrantInfoDto, +): PermissionGrantInfoDto[] { + return traverseParentPermissions(permissions, permission, true); } function findMargin(