RED-4788: fix workflow view permissions

This commit is contained in:
Dan Percic 2022-09-06 09:54:25 +03:00
parent 33cc449f09
commit 4797888aa7
2 changed files with 33 additions and 13 deletions

View File

@ -1,6 +1,7 @@
import { Injectable, TemplateRef } from '@angular/core';
import {
ActionConfig,
getParam,
IFilterGroup,
INestedFilter,
keyChecker,
@ -15,7 +16,7 @@ import {
import {
annotationDefaultColorConfig,
AnnotationShapeMap,
Dossier,
DOSSIER_ID,
File,
IFileAttributeConfig,
ProcessingType,
@ -39,10 +40,12 @@ import { DefaultColorsService } from '@services/entity-services/default-colors.s
import { map } from 'rxjs/operators';
import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
import { UserPreferenceService } from '@users/user-preference.service';
import { DossiersService } from '@services/dossiers/dossiers.service';
@Injectable()
export class ConfigService {
readonly listingMode$: Observable<ListingMode>;
readonly dossierId = getParam(DOSSIER_ID);
private readonly _listingMode$ = new BehaviorSubject<ListingMode>(ListingModes.table);
constructor(
@ -55,6 +58,7 @@ export class ConfigService {
private readonly _defaultColorsService: DefaultColorsService,
private readonly _dictionariesMapService: DictionariesMapService,
private readonly _userPreferenceService: UserPreferenceService,
private readonly _dossiersService: DossiersService,
) {
this.listingMode$ = this._listingMode$.asObservable();
@ -71,14 +75,18 @@ export class ConfigService {
this._userPreferenceService.saveFilesListingMode(listingMode);
}
workflowConfig(dossier: Dossier): WorkflowConfig<File, WorkflowFileStatus> {
get #dossier() {
return this._dossiersService.find(this.dossierId);
}
workflowConfig(): WorkflowConfig<File, WorkflowFileStatus> {
const { NEW, UNDER_REVIEW, UNDER_APPROVAL, APPROVED } = WorkflowFileStatuses;
const newColumn: WorkflowColumn<File, typeof NEW> = {
label: workflowFileStatusTranslations[NEW],
key: NEW,
enterFn: files => this._bulkActionsService.setToNew(files),
enterPredicate: files => this._permissionsService.canSetToNew(files, dossier),
enterPredicate: files => this._permissionsService.canSetToNew(files, this.#dossier),
color: '#D3D5DA',
entities: new BehaviorSubject([]),
};
@ -93,11 +101,15 @@ export class ConfigService {
await this._bulkActionsService.assignToMe(files);
}
},
enterPredicate: files =>
this._permissionsService.canSetUnderReview(files, dossier) ||
this._permissionsService.canAssignToSelf(files, dossier) ||
this._permissionsService.canAssignUser(files, dossier) ||
this._permissionsService.canUndoApproval(files, dossier),
enterPredicate: files => {
const dossier = this.#dossier;
return (
this._permissionsService.canSetUnderReview(files, dossier) ||
this._permissionsService.canAssignToSelf(files, dossier) ||
this._permissionsService.canAssignUser(files, dossier) ||
this._permissionsService.canUndoApproval(files, dossier)
);
},
key: UNDER_REVIEW,
color: '#FDBD00',
entities: new BehaviorSubject([]),
@ -106,8 +118,12 @@ export class ConfigService {
const underApprovalColumn: WorkflowColumn<File, typeof UNDER_APPROVAL> = {
label: workflowFileStatusTranslations[UNDER_APPROVAL],
enterFn: files => this._bulkActionsService.setToUnderApproval(files),
enterPredicate: files =>
this._permissionsService.canSetUnderApproval(files, dossier) || this._permissionsService.canUndoApproval(files, dossier),
enterPredicate: files => {
const dossier = this.#dossier;
return (
this._permissionsService.canSetUnderApproval(files, dossier) || this._permissionsService.canUndoApproval(files, dossier)
);
},
key: UNDER_APPROVAL,
color: '#374C81',
entities: new BehaviorSubject([]),
@ -116,8 +132,12 @@ export class ConfigService {
const approvedColumn: WorkflowColumn<File, typeof APPROVED> = {
label: workflowFileStatusTranslations[APPROVED],
enterFn: files => this._bulkActionsService.approve(files),
enterPredicate: files =>
this._permissionsService.isReadyForApproval(files, dossier) && this._permissionsService.canBeApproved(files, dossier),
enterPredicate: files => {
const dossier = this.#dossier;
return (
this._permissionsService.isReadyForApproval(files, dossier) && this._permissionsService.canBeApproved(files, dossier)
);
},
key: APPROVED,
color: '#48C9F7',
entities: new BehaviorSubject([]),

View File

@ -90,7 +90,7 @@ export class DossierOverviewScreenComponent extends ListingComponent<File> imple
super();
this.dossier$ = _dossiersService.getEntityChanged$(this.dossierId).pipe(tap(dossier => (this.#currentDossier = dossier)));
this.#currentDossier = _dossiersService.find(this.dossierId);
this.workflowConfig = configService.workflowConfig(this.#currentDossier);
this.workflowConfig = configService.workflowConfig();
this.dossierTemplateId = this.#currentDossier.dossierTemplateId;
this.files$ = merge(this.#files$, this.#dossierFilesChange$).pipe(shareLast());
this._updateFileAttributes();