From 7a55e124321f5e64ce18103ebbed15e5d53ca116 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 24 Mar 2022 14:37:36 +0200 Subject: [PATCH] Fixed Permission issues for edit dossier and deleted dossiers --- .../attributes/edit-dossier-attributes.component.ts | 2 +- .../src/app/services/entity-services/trash.service.ts | 3 ++- apps/red-ui/src/app/services/permissions.service.ts | 10 +++++++++- libs/common-ui | 2 +- libs/red-domain/src/lib/trash/trash-dossier.model.ts | 8 +++++++- libs/red-domain/src/lib/trash/trash.item.ts | 4 ++-- 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts index ff1ced3e0..18f014353 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts @@ -50,7 +50,7 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa } get disabled(): boolean { - return !this._permissionsService.canHardDeleteOrRestore(this.dossier); + return !this._permissionsService.isOwner(this.dossier); } get valid(): boolean { diff --git a/apps/red-ui/src/app/services/entity-services/trash.service.ts b/apps/red-ui/src/app/services/entity-services/trash.service.ts index 12be183e2..06153fc4c 100644 --- a/apps/red-ui/src/app/services/entity-services/trash.service.ts +++ b/apps/red-ui/src/app/services/entity-services/trash.service.ts @@ -70,7 +70,8 @@ export class TrashService extends GenericService { new TrashDossier( dossier, this._configService.values.DELETE_RETENTION_HOURS as number, - this._permissionsService.canDeleteDossier(dossier), + this._permissionsService.canHardDeleteDossier(dossier), + this._permissionsService.canRestoreDossier(dossier), ), ), switchMap(dossiers => this._dossierStatsService.getFor(dossiers.map(d => d.id)).pipe(map(() => dossiers))), diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index b60cf3156..513a54e0f 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -169,6 +169,14 @@ export class PermissionsService { return dossier.ownerId === this._userService.currentUser.id; } + canHardDeleteDossier(dossier: IDossier): boolean { + return this._userService.currentUser.isManager; + } + + canRestoreDossier(dossier: IDossier): boolean { + return this._userService.currentUser.isManager; + } + canArchiveDossier(dossier: Dossier): boolean { return ( this._featuresService.isEnabled(DOSSIERS_ARCHIVE) && dossier.isActive && dossier.ownerId === this._userService.currentUser.id @@ -180,7 +188,7 @@ export class PermissionsService { } canEditDossierDictionary(dossier: Dossier, user = this._userService.currentUser): boolean { - return dossier.isActive && this.canEditDossier(dossier, user); + return dossier.isActive && this.isDossierMember(dossier, user); } canEditDossierDictionaryDisplayName(dossier: Dossier, user = this._userService.currentUser): boolean { diff --git a/libs/common-ui b/libs/common-ui index 22434a262..08737703e 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 22434a2627d71f7cddc8bdd7d9adab9762c41e4c +Subproject commit 08737703e46fd0a8366bdf0c4241772d7ac8e2bb diff --git a/libs/red-domain/src/lib/trash/trash-dossier.model.ts b/libs/red-domain/src/lib/trash/trash-dossier.model.ts index 7cd317f11..fc0d78981 100644 --- a/libs/red-domain/src/lib/trash/trash-dossier.model.ts +++ b/libs/red-domain/src/lib/trash/trash-dossier.model.ts @@ -17,7 +17,12 @@ export class TrashDossier extends TrashItem { readonly ownerId: string; readonly softDeletedTime: string; - constructor(dossier: IDossier, protected readonly _retentionHours: number, readonly canHardDelete: boolean) { + constructor( + dossier: IDossier, + protected readonly _retentionHours: number, + readonly canHardDelete: boolean, + protected readonly _hasRestoreRights: boolean, + ) { super(_retentionHours, dossier.softDeletedTime, canHardDelete); this.dossierId = dossier.dossierId; this.dossierTemplateId = dossier.dossierTemplateId; @@ -29,6 +34,7 @@ export class TrashDossier extends TrashItem { // Because of migrations, for some this is not set this.softDeletedTime = dossier.softDeletedTime || '-'; + this.canRestore = this.canRestore && this._hasRestoreRights; } get id(): string { diff --git a/libs/red-domain/src/lib/trash/trash.item.ts b/libs/red-domain/src/lib/trash/trash.item.ts index 7f2b5cd0a..69d374646 100644 --- a/libs/red-domain/src/lib/trash/trash.item.ts +++ b/libs/red-domain/src/lib/trash/trash.item.ts @@ -6,8 +6,8 @@ export abstract class TrashItem { abstract readonly ownerId?: string; abstract readonly dossierId: string; abstract readonly icon: string; - readonly canRestore: boolean; readonly restoreDate: string; + canRestore: boolean; protected constructor( protected readonly _retentionHours: number, @@ -34,7 +34,7 @@ export abstract class TrashItem { get #canRestore(): boolean { const { daysLeft, hoursLeft, minutesLeft } = getLeftDateTime(this.restoreDate); - return daysLeft >= 0 && hoursLeft >= 0 && minutesLeft > 0; + return daysLeft >= 0 || hoursLeft >= 0 || minutesLeft > 0; } get #restoreDate(): string {