Browse Source

update: permission selection rules are met 🙌

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

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

@ -196,25 +196,19 @@ export class PermissionManagementComponent
} }
setParentClicked(clickedPermission: PermissionGrantInfoDto) { setParentClicked(clickedPermission: PermissionGrantInfoDto) {
let childPermissionGrantedCount = 0; const parentPermissions: PermissionGrantInfoDto[] = findAllParentPermissions(
let parentPermission: PermissionGrantInfoDto; this.permissions,
clickedPermission,
);
if (clickedPermission.parentName) { if (clickedPermission.parentName) {
this.permissions.forEach(per => { if (parentPermissions.length) {
if (per.name === clickedPermission.parentName) {
parentPermission = per;
}
});
this.permissions.forEach(per => {
if (parentPermission.name === per.parentName) {
per.isGranted && childPermissionGrantedCount++;
}
});
if (childPermissionGrantedCount === 1 && !parentPermission.isGranted) {
this.permissions = this.permissions.map(per => { this.permissions = this.permissions.map(per => {
if (per.name === parentPermission.name) { parentPermissions.forEach(parent => {
per.isGranted = true; if (per.name === parent.name) {
} per.isGranted = true;
}
});
return per; return per;
}); });
} }
@ -223,8 +217,10 @@ export class PermissionManagementComponent
this.permissions = this.permissions.map(per => { this.permissions = this.permissions.map(per => {
const root = findRootParent(this.permissions, per); const root = findRootParent(this.permissions, per);
if (root && root.name === clickedPermission.name) { if (root) {
per.isGranted = root.isGranted; if (root.name === clickedPermission.name && !root.isGranted) {
per.isGranted = false;
}
} }
return per; return per;
}); });
@ -389,26 +385,44 @@ export class PermissionManagementComponent
} }
} }
function findRootParent( function traverseParentPermissions(
permissions: PermissionGrantInfoDto[], permissions: PermissionGrantInfoDto[],
permission: PermissionGrantInfoDto, permission: PermissionGrantInfoDto,
): PermissionGrantInfoDto | null { collectAll = false,
if (!permissions.length) { ): PermissionGrantInfoDto[] {
return null;
}
const permissionMap = new Map(permissions.map(p => [p.name, p])); const permissionMap = new Map(permissions.map(p => [p.name, p]));
let currentPermission = permissionMap.get(permission.name) ?? null; let currentPermission = permissionMap.get(permission.name) ?? null;
const parentPermissions: PermissionGrantInfoDto[] = [];
while (currentPermission && currentPermission.parentName) { while (currentPermission && currentPermission.parentName) {
const parentPermission = permissionMap.get(currentPermission.parentName); const parentPermission = permissionMap.get(currentPermission.parentName);
if (!parentPermission) { if (!parentPermission) {
break; break;
} }
parentPermissions.push(parentPermission);
currentPermission = 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( function findMargin(

Loading…
Cancel
Save