From f1b0d27a67743769d662f35b7436f7792c16cff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 26 Jun 2023 16:23:05 +0300 Subject: [PATCH] RED-4590: Refactor annotation permissions - fix sonar cube issues --- .../file/annotation-permissions.utils.ts | 55 +++++++++++++++ .../app/models/file/annotation.permissions.ts | 70 ++++++++----------- 2 files changed, 83 insertions(+), 42 deletions(-) create mode 100644 apps/red-ui/src/app/models/file/annotation-permissions.utils.ts diff --git a/apps/red-ui/src/app/models/file/annotation-permissions.utils.ts b/apps/red-ui/src/app/models/file/annotation-permissions.utils.ts new file mode 100644 index 000000000..a6a5d31d5 --- /dev/null +++ b/apps/red-ui/src/app/models/file/annotation-permissions.utils.ts @@ -0,0 +1,55 @@ +import { AnnotationWrapper } from '@models/file/annotation.wrapper'; +import { AnnotationPermissions } from '@models/file/annotation.permissions'; +import { Dictionary } from '@red/domain'; + +export const canUndo = (annotation: AnnotationWrapper, isApprover: boolean) => + !isApprover && (annotation.isSuggestion || annotation.pending); + +export const canAcceptSuggestion = (annotation: AnnotationWrapper, isApprover: boolean, canProcessManualRedaction: boolean) => { + const can = isApprover && (annotation.isSuggestion || annotation.isDeclinedSuggestion); + return annotation.isSuggestionAdd || annotation.isSuggestionRemoveDictionary ? can && canProcessManualRedaction : can; +}; + +export const canRejectSuggestion = (annotation: AnnotationWrapper, isApprover: boolean, canProcessManualRedaction: boolean) => { + const can = isApprover && annotation.isSuggestion; + return annotation.isSuggestionAdd || annotation.isSuggestionRemoveDictionary ? can && canProcessManualRedaction : can; +}; + +export const canForceHint = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => + canAddOrRequestRedaction && annotation.isIgnoredHint && !annotation.pending; + +export const canForceRedaction = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => + canAddOrRequestRedaction && annotation.isSkipped && !annotation.isFalsePositive && !annotation.pending; + +export const canAcceptRecommendation = (annotation: AnnotationWrapper) => annotation.isRecommendation && !annotation.pending; + +export const canMarkAsFalsePositive = (annotation: AnnotationWrapper, annotationEntity: Dictionary) => + annotation.canBeMarkedAsFalsePositive && annotationEntity.hasDictionary; + +export const canRemoveOrSuggestToRemoveOnlyHere = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => + canAddOrRequestRedaction && !annotation.pending && (annotation.isRedacted || (annotation.isHint && !annotation.isImage)); + +export const canRemoveOrSuggestToRemoveFromDictionary = (annotation: AnnotationWrapper) => + annotation.isModifyDictionary && + (annotation.isRedacted || annotation.isSkipped || annotation.isHint) && + !annotation.pending && + !annotation.hasBeenResized; + +export const canRemoveOrSuggestToRemoveRedaction = (annotations: AnnotationWrapper[], permissions: AnnotationPermissions) => + annotations.length === 1 && + (permissions.canRemoveOrSuggestToRemoveOnlyHere || + permissions.canRemoveOrSuggestToRemoveFromDictionary || + permissions.canMarkAsFalsePositive); + +export const canChangeLegalBasis = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => + canAddOrRequestRedaction && annotation.isRedacted && !annotation.pending; + +export const canRecategorizeImage = (annotation: AnnotationWrapper) => + ((annotation.isImage && !annotation.isSuggestion) || annotation.isSuggestionRecategorizeImage) && !annotation.pending; + +export const canResizeAnnotation = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => + canAddOrRequestRedaction && + (((annotation.isRedacted || annotation.isImage) && !annotation.isSuggestion) || + annotation.isSuggestionResize || + annotation.isRecommendation) && + !annotation.pending; diff --git a/apps/red-ui/src/app/models/file/annotation.permissions.ts b/apps/red-ui/src/app/models/file/annotation.permissions.ts index 3a06df2db..06736546c 100644 --- a/apps/red-ui/src/app/models/file/annotation.permissions.ts +++ b/apps/red-ui/src/app/models/file/annotation.permissions.ts @@ -3,6 +3,21 @@ import { Dictionary } from '@red/domain'; import { isArray } from 'lodash-es'; import { IqserPermissionsService } from '@iqser/common-ui'; import { Roles } from '@users/roles'; +import { + canAcceptRecommendation, + canAcceptSuggestion, + canChangeLegalBasis, + canForceHint, + canForceRedaction, + canMarkAsFalsePositive, + canRecategorizeImage, + canRejectSuggestion, + canRemoveOrSuggestToRemoveFromDictionary, + canRemoveOrSuggestToRemoveOnlyHere, + canRemoveOrSuggestToRemoveRedaction, + canResizeAnnotation, + canUndo, +} from './annotation-permissions.utils'; export class AnnotationPermissions { canUndo = true; @@ -37,50 +52,21 @@ export class AnnotationPermissions { for (const annotation of annotations) { const permissions: AnnotationPermissions = new AnnotationPermissions(); - - permissions.canUndo = !isApprover && (annotation.isSuggestion || annotation.pending); - permissions.canAcceptSuggestion = isApprover && (annotation.isSuggestion || annotation.isDeclinedSuggestion); - if (annotation.isSuggestionAdd || annotation.isSuggestionRemoveDictionary) { - permissions.canAcceptSuggestion = permissions.canAcceptSuggestion && canProcessManualRedaction; - } - permissions.canRejectSuggestion = isApprover && annotation.isSuggestion; - if (annotation.isSuggestionAdd || annotation.isSuggestionRemoveDictionary) { - permissions.canRejectSuggestion = permissions.canRejectSuggestion && canProcessManualRedaction; - } - - permissions.canForceHint = canAddOrRequestRedaction && annotation.isIgnoredHint && !annotation.pending; - permissions.canForceRedaction = - canAddOrRequestRedaction && annotation.isSkipped && !annotation.isFalsePositive && !annotation.pending; - permissions.canAcceptRecommendation = annotation.isRecommendation && !annotation.pending; - const annotationEntity = entities.find(entity => entity.type === annotation.type); - permissions.canMarkAsFalsePositive = annotation.canBeMarkedAsFalsePositive && annotationEntity.hasDictionary; - permissions.canRemoveOrSuggestToRemoveOnlyHere = - canAddOrRequestRedaction && !annotation.pending && (annotation.isRedacted || (annotation.isHint && !annotation.isImage)); - permissions.canRemoveOrSuggestToRemoveFromDictionary = - annotation.isModifyDictionary && - (annotation.isRedacted || annotation.isSkipped || annotation.isHint) && - !annotation.pending && - !annotation.hasBeenResized; - - permissions.canRemoveOrSuggestToRemoveRedaction = - annotations.length === 1 && - (permissions.canRemoveOrSuggestToRemoveOnlyHere || - permissions.canRemoveOrSuggestToRemoveFromDictionary || - permissions.canMarkAsFalsePositive); - - permissions.canChangeLegalBasis = canAddOrRequestRedaction && annotation.isRedacted && !annotation.pending; - - permissions.canRecategorizeImage = - ((annotation.isImage && !annotation.isSuggestion) || annotation.isSuggestionRecategorizeImage) && !annotation.pending; - - permissions.canResizeAnnotation = - canAddOrRequestRedaction && - (((annotation.isRedacted || annotation.isImage) && !annotation.isSuggestion) || - annotation.isSuggestionResize || - annotation.isRecommendation) && - !annotation.pending; + permissions.canUndo = canUndo(annotation, isApprover); + permissions.canAcceptSuggestion = canAcceptSuggestion(annotation, isApprover, canProcessManualRedaction); + permissions.canRejectSuggestion = canRejectSuggestion(annotation, isApprover, canProcessManualRedaction); + permissions.canForceHint = canForceHint(annotation, canAddOrRequestRedaction); + permissions.canForceRedaction = canForceRedaction(annotation, canAddOrRequestRedaction); + permissions.canAcceptRecommendation = canAcceptRecommendation(annotation); + permissions.canMarkAsFalsePositive = canMarkAsFalsePositive(annotation, annotationEntity); + permissions.canRemoveOrSuggestToRemoveOnlyHere = canRemoveOrSuggestToRemoveOnlyHere(annotation, canAddOrRequestRedaction); + permissions.canRemoveOrSuggestToRemoveFromDictionary = canRemoveOrSuggestToRemoveFromDictionary(annotation); + permissions.canRemoveOrSuggestToRemoveRedaction = canRemoveOrSuggestToRemoveRedaction(annotations, permissions); + permissions.canChangeLegalBasis = canChangeLegalBasis(annotation, canAddOrRequestRedaction); + permissions.canRecategorizeImage = canRecategorizeImage(annotation); + permissions.canResizeAnnotation = canResizeAnnotation(annotation, canAddOrRequestRedaction); summedPermissions._merge(permissions); }