RED-5482: wip permissions
This commit is contained in:
parent
56235e65f1
commit
271a29d656
@ -1,6 +1,8 @@
|
||||
import { AnnotationWrapper } from './annotation.wrapper';
|
||||
import { Dictionary } from '@red/domain';
|
||||
import { isArray } from 'lodash-es';
|
||||
import { IqserPermissionsService } from '@iqser/common-ui';
|
||||
import { ROLES } from '@users/roles';
|
||||
|
||||
export class AnnotationPermissions {
|
||||
canUndo = true;
|
||||
@ -16,12 +18,20 @@ export class AnnotationPermissions {
|
||||
canRecategorizeImage = true;
|
||||
canForceHint = true;
|
||||
|
||||
static forUser(isApprover: boolean, annotations: AnnotationWrapper | AnnotationWrapper[], entities: Dictionary[]) {
|
||||
static forUser(
|
||||
isApprover: boolean,
|
||||
annotations: AnnotationWrapper | AnnotationWrapper[],
|
||||
entities: Dictionary[],
|
||||
permissionsService: IqserPermissionsService,
|
||||
) {
|
||||
if (!isArray(annotations)) {
|
||||
annotations = [annotations];
|
||||
}
|
||||
|
||||
const summedPermissions: AnnotationPermissions = new AnnotationPermissions();
|
||||
const canAddRedaction = permissionsService.has(ROLES.redactions.write);
|
||||
const canRequestRedaction = permissionsService.has(ROLES.redactions.request);
|
||||
const canAddOrRequestRedaction = canAddRedaction || canRequestRedaction;
|
||||
|
||||
for (const annotation of annotations) {
|
||||
const permissions: AnnotationPermissions = new AnnotationPermissions();
|
||||
@ -30,27 +40,29 @@ export class AnnotationPermissions {
|
||||
permissions.canAcceptSuggestion = isApprover && (annotation.isSuggestion || annotation.isDeclinedSuggestion);
|
||||
permissions.canRejectSuggestion = isApprover && annotation.isSuggestion;
|
||||
|
||||
permissions.canForceHint = annotation.isIgnoredHint && !annotation.pending;
|
||||
permissions.canForceRedaction = annotation.isSkipped && !annotation.isFalsePositive && !annotation.pending;
|
||||
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 =
|
||||
!annotation.pending && (annotation.isRedacted || (annotation.isHint && !annotation.isImage));
|
||||
canAddOrRequestRedaction && !annotation.pending && (annotation.isRedacted || (annotation.isHint && !annotation.isImage));
|
||||
permissions.canRemoveOrSuggestToRemoveFromDictionary =
|
||||
annotation.isModifyDictionary &&
|
||||
(annotation.isRedacted || annotation.isSkipped || annotation.isHint) &&
|
||||
!annotation.pending &&
|
||||
!annotation.hasBeenResized;
|
||||
|
||||
permissions.canChangeLegalBasis = annotation.isRedacted && !annotation.pending;
|
||||
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) &&
|
||||
|
||||
@ -6,7 +6,7 @@ import { AnnotationActionsService } from '../../services/annotation-actions.serv
|
||||
import { AnnotationReferencesService } from '../../services/annotation-references.service';
|
||||
import { MultiSelectService } from '../../services/multi-select.service';
|
||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||
import { HelpModeService } from '@iqser/common-ui';
|
||||
import { HelpModeService, IqserPermissionsService } from '@iqser/common-ui';
|
||||
import { ViewModeService } from '../../services/view-mode.service';
|
||||
import { REDAnnotationManager } from '../../../pdf-viewer/services/annotation-manager.service';
|
||||
import { ROLES } from '@users/roles';
|
||||
@ -38,6 +38,7 @@ export class AnnotationActionsComponent implements OnChanges {
|
||||
readonly multiSelectService: MultiSelectService,
|
||||
private readonly _state: FilePreviewStateService,
|
||||
private readonly _permissionsService: PermissionsService,
|
||||
private readonly _iqserPermissionsService: IqserPermissionsService,
|
||||
private readonly _annotationManager: REDAnnotationManager,
|
||||
readonly annotationActionsService: AnnotationActionsService,
|
||||
readonly annotationReferencesService: AnnotationReferencesService,
|
||||
@ -119,6 +120,7 @@ export class AnnotationActionsComponent implements OnChanges {
|
||||
this._permissionsService.isApprover(dossier),
|
||||
this.annotations,
|
||||
this._state.dictionaries,
|
||||
this._iqserPermissionsService,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
<div *ngIf="(isWritable$ | async) && (multiSelectInactive$ | async)" [iqserHelpMode]="'highlights'">
|
||||
<iqser-circle-button
|
||||
(action)="convertHighlights(highlightGroup)"
|
||||
*allow="roles.highlights.convert"
|
||||
[icon]="'red:convert'"
|
||||
[size]="28"
|
||||
[tooltipPosition]="'above'"
|
||||
@ -16,6 +17,7 @@
|
||||
|
||||
<iqser-circle-button
|
||||
(action)="removeHighlights(highlightGroup)"
|
||||
*allow="roles.highlights.delete"
|
||||
[icon]="'iqser:trash'"
|
||||
[size]="28"
|
||||
[tooltipPosition]="'above'"
|
||||
|
||||
@ -6,6 +6,7 @@ import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { FilePreviewDialogService } from '../../services/file-preview-dialog.service';
|
||||
import { FileDataService } from '../../services/file-data.service';
|
||||
import { MultiSelectService } from '../../services/multi-select.service';
|
||||
import { ROLES } from '@users/roles';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-highlights-separator [highlightGroup] [annotation]',
|
||||
@ -20,6 +21,7 @@ export class HighlightsSeparatorComponent {
|
||||
readonly circleButtonTypes = CircleButtonTypes;
|
||||
readonly isWritable$ = this._state.isWritable$;
|
||||
readonly multiSelectInactive$ = this._multiSelectService.inactive$;
|
||||
readonly roles = ROLES;
|
||||
|
||||
constructor(
|
||||
private readonly _dialogService: FilePreviewDialogService,
|
||||
|
||||
@ -143,7 +143,9 @@ export class PdfAnnotationActionsService {
|
||||
const dossier = this.#state.dossier;
|
||||
const isApprover = this.#permissionsService.isApprover(dossier);
|
||||
|
||||
const permissions = annotations.map(a => AnnotationPermissions.forUser(isApprover, a, this.#state.dictionaries));
|
||||
const permissions = annotations.map(a =>
|
||||
AnnotationPermissions.forUser(isApprover, a, this.#state.dictionaries, this.#iqserPermissionsService),
|
||||
);
|
||||
return {
|
||||
canResize: permissions.length === 1 && permissions[0].canResizeAnnotation,
|
||||
canChangeLegalBasis: permissions.reduce((acc, next) => acc && next.canChangeLegalBasis, true),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user