From 4672c587031306e7e36e53bf738b3d9bcb8aa8f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Thu, 10 Feb 2022 12:58:07 +0200 Subject: [PATCH] RED-3394: Dossier hard delete permissions --- .../admin/screens/trash/trash-screen.component.html | 3 ++- .../admin/screens/trash/trash-screen.component.ts | 12 ++++++++++++ apps/red-ui/src/app/services/permissions.service.ts | 4 ++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.html index 2d69a12d1..35c955de3 100644 --- a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.html @@ -34,7 +34,7 @@ impl readonly circleButtonTypes = CircleButtonTypes; readonly tableHeaderLabel = _('trash.table-header.title'); readonly canRestoreSelected$ = this._canRestoreSelected$; + readonly canHardDeleteSelected$ = this._canHardDeleteSelected$; readonly tableColumnConfigs: TableColumnConfig[] = [ { label: _('trash.table-col-names.name'), sortByKey: 'searchKey' }, { label: _('trash.table-col-names.owner'), class: 'user-column' }, @@ -46,6 +49,7 @@ export class TrashScreenComponent extends ListingComponent impl constructor( protected readonly _injector: Injector, private readonly _loadingService: LoadingService, + private readonly _permissionsService: PermissionsService, private readonly _dossiersService: DossiersService, readonly routerHistoryService: RouterHistoryService, private readonly _configService: ConfigService, @@ -61,6 +65,13 @@ export class TrashScreenComponent extends ListingComponent impl ); } + private get _canHardDeleteSelected$(): Observable { + return this.listingService.selectedEntities$.pipe( + map(entities => entities.length && !entities.find(dossier => !dossier.canHardDelete)), + distinctUntilChanged(), + ); + } + disabledFn = (dossier: DossierListItem) => !dossier.canRestore; async ngOnInit(): Promise { @@ -118,6 +129,7 @@ export class TrashScreenComponent extends ListingComponent impl searchKey: dossier.dossierName, restoreDate, canRestore: this._canRestoreDossier(restoreDate), + canHardDelete: this._permissionsService.canDeleteDossier(dossier), // Because of migrations, for some this is not set softDeletedTime: dossier.softDeletedTime || '-', }; diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index b476bd189..c1242d5c4 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { UserService } from './user.service'; -import { Dossier, File, IComment } from '@red/domain'; +import { Dossier, File, IComment, IDossier } from '@red/domain'; import { DossiersService } from './entity-services/dossiers.service'; @Injectable({ @@ -127,7 +127,7 @@ export class PermissionsService { return this.isApprover(dossier) && files.reduce((prev, file) => prev && file.isApproved, true); } - canDeleteDossier(dossier: Dossier): boolean { + canDeleteDossier(dossier: IDossier): boolean { return dossier.ownerId === this._userService.currentUser.id; }