RED-4590: Refactor annotation permissions - fix sonar cube issues
This commit is contained in:
parent
24c06a868c
commit
f1b0d27a67
@ -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;
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user