|
|
|
@ -49,9 +49,8 @@ type PermissionWithGroupName = PermissionGrantInfoDto & { |
|
|
|
}) |
|
|
|
export class PermissionManagementComponent |
|
|
|
implements |
|
|
|
PermissionManagement.PermissionManagementComponentInputs, |
|
|
|
PermissionManagement.PermissionManagementComponentOutputs |
|
|
|
{ |
|
|
|
PermissionManagement.PermissionManagementComponentInputs, |
|
|
|
PermissionManagement.PermissionManagementComponentOutputs { |
|
|
|
@Input() |
|
|
|
readonly providerName!: string; |
|
|
|
|
|
|
|
@ -118,7 +117,7 @@ export class PermissionManagementComponent |
|
|
|
|
|
|
|
trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name; |
|
|
|
|
|
|
|
constructor(protected service: PermissionsService, protected configState: ConfigStateService) {} |
|
|
|
constructor(protected service: PermissionsService, protected configState: ConfigStateService) { } |
|
|
|
|
|
|
|
getChecked(name: string) { |
|
|
|
return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted; |
|
|
|
@ -131,21 +130,19 @@ export class PermissionManagementComponent |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
const margin = `margin-${ |
|
|
|
(document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left' |
|
|
|
}.px`;
|
|
|
|
const margin = `margin-${(document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left' |
|
|
|
}.px`;
|
|
|
|
|
|
|
|
const permissions = |
|
|
|
(this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions || |
|
|
|
[]; |
|
|
|
|
|
|
|
this.selectedGroupPermissions = permissions.map( |
|
|
|
permission => |
|
|
|
({ |
|
|
|
...permission, |
|
|
|
style: { [margin]: findMargin(permissions, permission) }, |
|
|
|
isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted, |
|
|
|
} as unknown as PermissionWithStyle), |
|
|
|
({ |
|
|
|
...permission, |
|
|
|
style: { [margin]: findMargin(permissions, permission) }, |
|
|
|
isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted, |
|
|
|
} as unknown as PermissionWithStyle), |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
@ -174,7 +171,7 @@ export class PermissionManagementComponent |
|
|
|
this.isGrantedByOtherProviderName(clickedPermission.grantedProviders) |
|
|
|
) |
|
|
|
return; |
|
|
|
|
|
|
|
this.setSelectedGroup(this.selectedGroup); |
|
|
|
setTimeout(() => { |
|
|
|
this.permissions = this.permissions.map(per => { |
|
|
|
if (clickedPermission.name === per.name) { |
|
|
|
@ -186,11 +183,55 @@ export class PermissionManagementComponent |
|
|
|
} |
|
|
|
return per; |
|
|
|
}); |
|
|
|
this.updateSelectedGroupPermissions(clickedPermission); |
|
|
|
this.setTabCheckboxState(); |
|
|
|
this.setGrantCheckboxState(); |
|
|
|
this.setParentClicked(clickedPermission); |
|
|
|
}, 0); |
|
|
|
} |
|
|
|
|
|
|
|
setParentClicked(clickedPermissions: PermissionGrantInfoDto) { |
|
|
|
let childPermissionGrantedCount = 0; |
|
|
|
let parentPermission: PermissionGrantInfoDto; |
|
|
|
|
|
|
|
if (clickedPermissions.parentName) { |
|
|
|
this.permissions.forEach(per => { |
|
|
|
if (per.name === clickedPermissions.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 => { |
|
|
|
if (per.name === parentPermission.name) { |
|
|
|
per.isGranted = true; |
|
|
|
} |
|
|
|
return per; |
|
|
|
}) |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
this.permissions = this.permissions.map(per => { |
|
|
|
if (per.parentName === clickedPermissions.name) { |
|
|
|
per.isGranted = false; |
|
|
|
} |
|
|
|
return per; |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) { |
|
|
|
this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => { |
|
|
|
if (per.name === clickedPermissions.name) { |
|
|
|
per.isGranted = !per.isGranted |
|
|
|
} |
|
|
|
return per; |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
setTabCheckboxState() { |
|
|
|
const selectableGroupPermissions = this.selectedGroupPermissions.filter(per => |
|
|
|
per.grantedProviders.every(p => p.providerName === this.providerName), |
|
|
|
@ -254,6 +295,7 @@ export class PermissionManagementComponent |
|
|
|
this.selectThisTab = !this.selectAllTab; |
|
|
|
this.setTabCheckboxState(); |
|
|
|
} |
|
|
|
this.onChangeGroup(this.selectedGroup); |
|
|
|
} |
|
|
|
|
|
|
|
onChangeGroup(group: PermissionGroupDto) { |
|
|
|
@ -268,7 +310,7 @@ export class PermissionManagementComponent |
|
|
|
const changedPermissions: UpdatePermissionDto[] = this.permissions |
|
|
|
.filter(per => |
|
|
|
(unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted === |
|
|
|
per.isGranted |
|
|
|
per.isGranted |
|
|
|
? false |
|
|
|
: true, |
|
|
|
) |
|
|
|
|