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 {