From 0b8a163d0ce0f45385a66156c3bf2141e770c194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Wed, 15 May 2024 16:30:22 +0300 Subject: [PATCH 1/2] RED-8872: Disable editing team members for dossier in inactive template --- .../edit-dossier-dialog.component.ts | 6 +++--- .../edit-dossier-team.component.ts | 16 ++++++++-------- .../src/app/services/permissions.service.ts | 7 +++++-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts index aa986bee6..3d9269b2d 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts @@ -35,8 +35,6 @@ interface NavItem { providers: [dossiersServiceProvider], }) export class EditDossierDialogComponent extends BaseDialogComponent implements AfterViewInit { - readonly #currentUser = getCurrentUser(); - private _dossier: Dossier; readonly roles = Roles; navItems: NavItem[] = []; readonly iconButtonTypes = IconButtonTypes; @@ -47,6 +45,8 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A @ViewChild(EditDossierDictionaryComponent) dictionaryComponent: EditDossierDictionaryComponent; @ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent; @ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent; + readonly #currentUser = getCurrentUser(); + private _dossier: Dossier; constructor( readonly iqserPermissionsService: IqserPermissionsService, @@ -181,7 +181,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A key: 'members', title: _('edit-dossier-dialog.nav-items.team-members'), sideNavTitle: _('edit-dossier-dialog.nav-items.members'), - readonly: !this._permissionsService.canEditTeamMembers(), + readonly: !this._permissionsService.canEditTeamMembers(this._dossier), helpModeKey: 'edit_dossier_members_DIALOG', }, { diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts index a8f2653b6..2d330d904 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts @@ -19,26 +19,26 @@ import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-doss changeDetection: ChangeDetectionStrategy.OnPush, }) export class EditDossierTeamComponent implements EditDossierSectionInterface, OnChanges { - readonly #userService = inject(UserService); - readonly #dossiersService = inject(DossiersService); - readonly #permissionsService = inject(PermissionsService); - readonly #filesService = inject(FilesService); form = this.#getForm(); - readonly #formValue$ = this.form.valueChanges; searchQuery = ''; @Input() dossier: Dossier; membersSelectOptions: string[] = []; + readonly isDocumine = getConfig().IS_DOCUMINE; + readonly #userService = inject(UserService); readonly ownersSelectOptions = this.#userService.all.filter(u => u.isManager).map(m => m.id); + readonly #dossiersService = inject(DossiersService); + readonly #permissionsService = inject(PermissionsService); + readonly #filesService = inject(FilesService); + readonly #formValue$ = this.form.valueChanges; readonly selectedReviewers$ = this.#formValue$.pipe(map(v => v.members.filter(m => !v.approvers.includes(m)))); readonly selectedApprovers$ = this.#formValue$.pipe(map(v => v.approvers)); - readonly isDocumine = getConfig().IS_DOCUMINE; get valid(): boolean { return this.form.valid; } get disabled() { - return !this.#permissionsService.canEditTeamMembers() || !this.form.get('owner').value; + return !this.#permissionsService.canEditTeamMembers(this.dossier) || !this.form.get('owner').value; } get hasOwner() { @@ -175,7 +175,7 @@ export class EditDossierTeamComponent implements EditDossierSectionInterface, On #resetForm() { this.form.reset( { - owner: { value: this.dossier.ownerId, disabled: !this.#permissionsService.canEditTeamMembers() }, + owner: { value: this.dossier.ownerId, disabled: !this.#permissionsService.canEditTeamMembers(this.dossier) }, approvers: this.#sortByName([...this.dossier.approverIds]), members: this.#sortByName([...this.dossier.memberIds]), } as unknown, diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index 456ec57a5..05e98f73d 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -18,6 +18,7 @@ import { FilesMapService } from '@services/files/files-map.service'; import { Roles } from '@users/roles'; import { UserPreferenceService } from '@users/user-preference.service'; import { UserService } from '@users/user.service'; +import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; @Injectable({ providedIn: 'root' }) export class PermissionsService { @@ -29,6 +30,7 @@ export class PermissionsService { private readonly _featuresService: FeaturesService, private readonly _userPreferenceService: UserPreferenceService, private readonly _iqserPermissionsService: IqserPermissionsService, + private readonly _dossierTemplatesService: DossierTemplatesService, ) {} get #userId(): string { @@ -313,8 +315,9 @@ export class PermissionsService { return dossier.isActive && this.isOwner(dossier) && this._iqserPermissionsService.has(Roles.dossierAttributes.write); } - canEditTeamMembers(): boolean { - return this._iqserPermissionsService.has(Roles.dossiers.edit) && this.isManager(); + canEditTeamMembers(dossier: Dossier): boolean { + const dossierTemplate = this._dossierTemplatesService.find(dossier.dossierTemplateId); + return this._iqserPermissionsService.has(Roles.dossiers.edit) && this.isManager() && dossierTemplate.isActive; } isAdmin(): boolean { From 354c117624659f868242d6ddd2b307aac096274a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Wed, 15 May 2024 23:34:40 +0300 Subject: [PATCH 2/2] RED-8872: Fix comments --- .../edit-dossier-dialog.component.ts | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts index 3d9269b2d..2a66f256f 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts @@ -46,7 +46,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A @ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent; @ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent; readonly #currentUser = getCurrentUser(); - private _dossier: Dossier; + #dossier: Dossier; constructor( readonly iqserPermissionsService: IqserPermissionsService, @@ -61,13 +61,13 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A readonly configService: ConfigService, ) { super(_dialogRef, true); - this.dossier$ = this._dossiersService.getEntityChanged$(_data.dossierId).pipe( + this.dossier$ = this._dossiersService.getEntityChanged$(this._data.dossierId).pipe( tap(dossier => { - this._dossier = dossier; + this.#dossier = dossier; this._initializeNavItems(); }), ); - this.activeNav = _data.section || 'dossierInfo'; + this.activeNav = this._data.section || 'dossierInfo'; } get activeNavItem(): NavItem { @@ -94,11 +94,11 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A get showActionButtons(): boolean { return ( - (['dossierDictionary'].includes(this.activeNav) && this._permissionsService.canEditDossierDictionary(this._dossier)) || + (['dossierDictionary'].includes(this.activeNav) && this._permissionsService.canEditDossierDictionary(this.#dossier)) || (['members'].includes(this.activeNav) && this.#currentUser.isManager && this.iqserPermissionsService.has(Roles.dossiers.edit)) || - this._permissionsService.canEditDossier(this._dossier) + this._permissionsService.canEditDossier(this.#dossier) ); } @@ -115,7 +115,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A } ngAfterViewInit() { - if (!this._dossier.ownerId) { + if (!this.#dossier.ownerId) { this._toaster.error(_('edit-dossier-dialog.missing-owner')); } } @@ -126,7 +126,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A this._loadingService.stop(); if (result.success) { - this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this._dossier.dossierName } }); + this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this.#dossier.dossierName } }); } if (result.success && options?.closeAfterSave) { @@ -159,21 +159,21 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A key: 'dossierInfo', title: _('edit-dossier-dialog.nav-items.general-info'), sideNavTitle: _('edit-dossier-dialog.nav-items.dossier-info'), - readonly: !this._dossier.isActive || !this._permissionsService.canEditDossier(this._dossier), + readonly: !this.#dossier.isActive || !this._permissionsService.canEditDossier(this.#dossier), helpModeKey: 'edit_dossier_dossier_info_DIALOG', }, { key: 'downloadPackage', title: _('edit-dossier-dialog.nav-items.choose-download'), sideNavTitle: _('edit-dossier-dialog.nav-items.download-package'), - readonly: !this._permissionsService.canEditDossier(this._dossier), + readonly: !this._permissionsService.canEditDossier(this.#dossier), helpModeKey: 'edit_dossier_download_package_DIALOG', }, { key: 'dossierDictionary', sideNavTitle: _('edit-dossier-dialog.nav-items.dictionary'), title: _('edit-dossier-dialog.nav-items.dossier-dictionary'), - readonly: !this._permissionsService.canEditDossierDictionary(this._dossier), + readonly: !this._permissionsService.canEditDossierDictionary(this.#dossier), helpModeKey: 'edit_dossier_dossier_dictionary_DIALOG', hide: this.configService.values.IS_DOCUMINE, }, @@ -181,13 +181,13 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A key: 'members', title: _('edit-dossier-dialog.nav-items.team-members'), sideNavTitle: _('edit-dossier-dialog.nav-items.members'), - readonly: !this._permissionsService.canEditTeamMembers(this._dossier), + readonly: !this._permissionsService.canEditTeamMembers(this.#dossier), helpModeKey: 'edit_dossier_members_DIALOG', }, { key: 'dossierAttributes', title: _('edit-dossier-dialog.nav-items.dossier-attributes'), - readonly: !this._permissionsService.canEditDossierAttributes(this._dossier), + readonly: !this._permissionsService.canEditDossierAttributes(this.#dossier), helpModeKey: 'edit_dossier_dossier_attributes_DIALOG', }, ];