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) {
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(

Loading…
Cancel
Save