From 8d57bec18857fd4a54c4c20cbff9375d17516977 Mon Sep 17 00:00:00 2001 From: oussamasic <oussamazerouali42@gmail.com> Date: Fri, 3 Sep 2021 18:54:49 +0200 Subject: [PATCH] add checkHasRole Service --- .../archive-search.component.html | 4 +- .../archive-search.component.ts | 78 ++++++++++++------- .../src/app/archive/archive.service.ts | 10 ++- 3 files changed, 61 insertions(+), 31 deletions(-) diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.html b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.html index 677c0ebff..73be1a829 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.html +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.html @@ -172,8 +172,8 @@ ></i> </div> <div class="col-1"> - <vitamui-common-menu-button [disabled]="itemSelected === 0" [overlayPos]="'end'" [icon]="'vitamui-icon-more-horiz'"> - <button mat-menu-item (click)="exportDIPService()"> + <vitamui-common-menu-button [overlayPos]="'end'" [icon]="'vitamui-icon-more-horiz'"> + <button mat-menu-item (click)="exportDIPService()" [disabled]="(itemSelected === 0 && hasDipExportRole) || !hasDipExportRole"> {{ 'ARCHIVE_SEARCH.DIP.EXPORT_DIP' | translate }} </button> </vitamui-common-menu-button> diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.ts index 4f374bb24..438a2c2cc 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.ts @@ -56,7 +56,7 @@ import { SearchCriteriaCategory, SearchCriteriaEltDto, SearchCriteriaStatusEnum, - SearchCriteriaTypeEnum + SearchCriteriaTypeEnum, } from '../models/search.criteria'; import { Unit } from '../models/unit.interface'; import { VitamUISnackBarComponent } from '../shared/vitamui-snack-bar'; @@ -70,7 +70,7 @@ const FILTER_DEBOUNCE_TIME_MS = 400; @Component({ selector: 'app-archive-search', templateUrl: './archive-search.component.html', - styleUrls: ['./archive-search.component.scss'] + styleUrls: ['./archive-search.component.scss'], }) export class ArchiveSearchComponent implements OnInit, OnChanges { constructor( @@ -151,7 +151,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { this.archiveService.getOntologiesFromJson().subscribe((data: any) => { this.ontologies = data; - this.ontologies.sort(function(a: any, b: any) { + this.ontologies.sort(function (a: any, b: any) { const shortNameA = a.Label; const shortNameB = b.Label; return shortNameA < shortNameB ? -1 : shortNameA > shortNameB ? 1 : 0; @@ -189,7 +189,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { archiveUnits: Unit[]; ontologies: any; filterMapType: { [key: string]: string[] } = { - status: ['Folder', 'Document', 'Subfonds', 'Class', 'Subgrp', 'Otherlevel', 'Series', 'Subseries', 'Collection', 'Fonds'] + status: ['Folder', 'Document', 'Subfonds', 'Class', 'Subgrp', 'Otherlevel', 'Series', 'Subseries', 'Collection', 'Fonds'], }; shouldShowPreviewArchiveUnit = false; @@ -217,6 +217,9 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { listOfUAIdToInclude: CriteriaValue[] = []; listOfUAIdToExclude: CriteriaValue[] = []; isIndeterminate: boolean; + hasDipExportRole = false; + hasEliminationActionRole = false; + hasEliminationAnalysisRole = false; selectedCategoryChange(selectedCategoryIndex: number) { this.additionalSearchCriteriaCategoryIndex = selectedCategoryIndex; @@ -282,7 +285,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { 'Series', 'Subseries', 'Collection', - 'Fonds' + 'Fonds', ]; const searchCriteriaChange = merge(this.orderChange, this.filterChange).pipe(debounceTime(FILTER_DEBOUNCE_TIME_MS)); @@ -290,6 +293,9 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { searchCriteriaChange.subscribe(() => { this.submit(); }); + this.checkUserHasRole('DIPExport', 'ROLE_EXPORT_DIP', +this.tenantIdentifier); + // this.checkUserHasRole('EliminationAnalysis', 'ROLE_EXPORT_DIP', +this.tenantIdentifier); + // this.checkUserHasRole('EliminationAction', 'ROLE_EXPORT_DIP', +this.tenantIdentifier); } ngOnChanges(changes: SimpleChanges): void { @@ -356,7 +362,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { this.archiveExchangeDataService.sendAppraisalFromMainSearchCriteriaAction({ keyElt, valueElt, - action: 'REMOVE' + action: 'REMOVE', }); } } @@ -430,7 +436,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { valueShown: true, status: SearchCriteriaStatusEnum.NOT_INCLUDED, keyTranslated, - valueTranslated + valueTranslated, }); criteria.values = values; this.searchCriterias.set(keyElt, criteria); @@ -451,7 +457,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { valueShown: true, status: SearchCriteriaStatusEnum.NOT_INCLUDED, keyTranslated, - valueTranslated + valueTranslated, }); const criteria = { key: keyElt, @@ -460,7 +466,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { category, keyTranslated, valueTranslated, - dataType + dataType, }; this.searchCriterias.set(keyElt, criteria); } @@ -513,7 +519,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: strValues, operator: criteria.operator, category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.NODES], - dataType: criteria.dataType + dataType: criteria.dataType, }); } }); @@ -532,7 +538,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: strValues, operator: criteria.operator, category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.FIELDS], - dataType: criteria.dataType + dataType: criteria.dataType, }); } }); @@ -555,7 +561,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: typesFilterValues, operator: 'EQ', category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.FIELDS], - dataType: 'STRING' + dataType: 'STRING', }); } } @@ -574,7 +580,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: [...new Array({ id: value, value })], operator: 'EQ', category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.APPRAISAL_RULE], - dataType: criteria.dataType + dataType: criteria.dataType, }); }); } else { @@ -587,7 +593,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: strValues, operator: criteria.operator, category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.APPRAISAL_RULE], - dataType: criteria.dataType + dataType: criteria.dataType, }); } this.updateCriteriaStatus(SearchCriteriaStatusEnum.NOT_INCLUDED, SearchCriteriaStatusEnum.IN_PROGRESS); @@ -603,7 +609,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { criteriaList: this.criteriaSearchList, pageNumber: this.currentPage, size: PAGE_SIZE, - sortingCriteria + sortingCriteria, }; this.archiveService.searchArchiveUnitsByCriteria(searchCriteria, this.accessContract).subscribe( (pagedResult: PagedResult) => { @@ -656,7 +662,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { operator: criteria.operator, keyTranslated: criteria.keyTranslated, valueTranslated: criteria.valueTranslated, - dataType: criteria.dataType + dataType: criteria.dataType, }); }); @@ -664,7 +670,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { id: null, name: '', savingDate: new Date().toISOString(), - searchCriteriaList: _criteriaList + searchCriteriaList: _criteriaList, }; this.openCriteriaPopup(_searchCriteriaHistory); @@ -677,7 +683,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { dialogConfig.data = { searchCriteriaHistory: searchCriteriaHistory$, originalSearchCriteria: this.searchCriterias, - nbCriterias: this.archiveExchangeDataService.nbFilters(searchCriteriaHistory$) + nbCriterias: this.archiveExchangeDataService.nbFilters(searchCriteriaHistory$), }; const dialogRef = this.dialog.open(SearchCriteriaSaverComponent, dialogConfig); @@ -864,7 +870,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { pageNumber: this.currentPage, size: PAGE_SIZE, sortingCriteria, - language: this.translateService.currentLang + language: this.translateService.currentLang, }; this.archiveService.exportCsvSearchArchiveUnitsByCriteria(searchCriteria, this.accessContract); } @@ -956,14 +962,14 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { pageNumber: this.currentPage, size: PAGE_SIZE, sortingCriteria, - language: this.translateService.currentLang + language: this.translateService.currentLang, }; this.archiveService.exportDIP(exportDIPSearchCriteria, this.accessContract).subscribe((data) => { console.log('response', JSON.parse(data)); const guid = 'aeeaaaaaaggtywctaanl4al3rxsbxziaaaaq'; const message = 'custom message for different workflows'; - let index = this.startupService.getReferentialUrl().lastIndexOf('/'); - let serviceUrl = + const index = this.startupService.getReferentialUrl().lastIndexOf('/'); + const serviceUrl = this.startupService.getReferentialUrl().substring(0, index) + '/logbook-operation/tenant/' + this.tenantIdentifier + @@ -989,7 +995,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: listOfUAIdToInclude, operator: 'EQ', category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.FIELDS], - dataType: 'String' + dataType: 'String', }); } @@ -999,7 +1005,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: listOfUAIdToExclude, operator: 'NOT_EQ', category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.FIELDS], - dataType: 'String' + dataType: 'String', }); } } @@ -1019,10 +1025,28 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { panelClass: 'vitamui-snack-bar', data: { type: 'WorkflowSuccessSnackBar', - message: message, - serviceUrl: serviceUrl + message, + serviceUrl, }, - duration: 100000 + duration: 100000, + }); + } + + checkUserHasRole(operation: string, role: string, tenantIdentifier: number) { + this.archiveService.hasArchiveSearcheRole(role, tenantIdentifier).subscribe((result) => { + switch (operation) { + case 'DIPExport': + this.hasDipExportRole = result; + break; + case 'EliminationAnalysis': + this.hasEliminationAnalysisRole = result; + break; + case 'EliminationAction': + this.hasEliminationActionRole = result; + break; + default: + break; + } }); } } diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive.service.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive.service.ts index d9b0922bc..6c41603c4 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive.service.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive.service.ts @@ -39,7 +39,7 @@ import { Inject, Injectable, LOCALE_ID } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; import { Observable, of, throwError, TimeoutError } from 'rxjs'; import { catchError, map, tap } from 'rxjs/operators'; -import { SearchService } from 'ui-frontend-common'; +import { SearchService, SecurityService } from 'ui-frontend-common'; import { ArchiveApiService } from '../core/api/archive-api.service'; import { FilingHoldingSchemeNode } from './models/node.interface'; import { SearchResponse } from './models/search-response.interface'; @@ -55,7 +55,8 @@ export class ArchiveService extends SearchService<any> { private archiveApiService: ArchiveApiService, http: HttpClient, @Inject(LOCALE_ID) private locale: string, - private snackBar: MatSnackBar + private snackBar: MatSnackBar, + private securityService: SecurityService ) { super(http, archiveApiService, 'ALL'); } @@ -219,6 +220,11 @@ export class ArchiveService extends SearchService<any> { headers = headers.append('X-Access-Contract-Id', accessContract); return this.archiveApiService.exportDIP(criteriaDto, headers); } + + hasArchiveSearcheRole(role: string, tenantIdentifier: number): Observable<boolean> { + const applicationIdentifier = 'ARCHIVE_SEARCH_MANAGEMENT_APP'; + return this.securityService.hasRole(applicationIdentifier, tenantIdentifier, role); + } } function idExists(units: Unit[], id: string): boolean { -- GitLab