From 1c81469e6b246902a93e81ee84137f147535fd19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Thu, 15 Jul 2021 12:24:16 +0300 Subject: [PATCH] RED-1817: fixed access permissions to settings screens --- .../app/modules/admin/admin-routing.module.ts | 21 +++-- .../admin-side-nav.component.html | 3 +- .../admin-side-nav.component.ts | 9 +- .../active-fields-listing.component.html | 36 ++------ ...r-attributes-listing-screen.component.html | 15 ++-- ...ier-attributes-listing-screen.component.ts | 4 +- ...er-templates-listing-screen.component.html | 56 +++---------- ...e-attributes-listing-screen.component.html | 39 +++------ .../reports/reports-screen.component.html | 4 +- .../reports/reports-screen.component.scss | 1 + .../reports/reports-screen.component.ts | 4 +- .../screens/trash/trash-screen.component.html | 67 ++++----------- .../screens/trash/trash-screen.component.ts | 7 +- .../dossier-listing-screen.component.html | 53 +++--------- .../dossier-listing-screen.component.ts | 34 ++++---- .../dossier-overview-screen.component.html | 82 ++++--------------- .../shared/base/base-listing.component.ts | 20 ++++- .../quick-filters/quick-filters.component.ts | 2 +- 18 files changed, 149 insertions(+), 308 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts index 2d023ef19..4006ca91b 100644 --- a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts @@ -111,14 +111,19 @@ const routes = [ { path: '', redirectTo: 'dictionaries', pathMatch: 'full' } ] } - ] + ], + data: { + routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard], + requiredRoles: ['RED_MANAGER', 'RED_ADMIN'] + } }, { path: 'users', component: UserListingScreenComponent, canActivate: [CompositeRouteGuard], data: { - routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard] + routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard], + requiredRoles: ['RED_USER_ADMIN'] } }, { @@ -126,7 +131,8 @@ const routes = [ component: LicenseInformationScreenComponent, canActivate: [CompositeRouteGuard], data: { - routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard] + routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard], + requiredRoles: ['RED_ADMIN'] } }, { @@ -134,7 +140,8 @@ const routes = [ component: DigitalSignatureScreenComponent, canActivate: [CompositeRouteGuard], data: { - routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard] + routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard], + requiredRoles: ['RED_ADMIN'] } }, { @@ -142,7 +149,8 @@ const routes = [ component: AuditScreenComponent, canActivate: [CompositeRouteGuard], data: { - routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard] + routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard], + requiredRoles: ['RED_ADMIN'] } }, { @@ -150,7 +158,8 @@ const routes = [ component: SmtpConfigScreenComponent, canActivate: [CompositeRouteGuard], data: { - routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard] + routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard], + requiredRoles: ['RED_ADMIN'] } }, { diff --git a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.html b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.html index 22319a72a..a4d370d76 100644 --- a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.html +++ b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.html @@ -4,7 +4,8 @@ *ngIf=" (!item.onlyAdmin || permissionsService.isAdmin()) && (!item.onlyDevMode || userPreferenceService.areDevFeaturesEnabled) && - (!item.userManagerOnly || permissionsService.canManageUsers()) + (!item.userManagerOnly || permissionsService.canManageUsers()) && + (!item.onlyManager || permissionsService.isManager()) " [routerLinkActiveOptions]="{ exact: false }" [routerLink]="prefix + item.screen" diff --git a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts index 70ca19201..13dbb85c0 100644 --- a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts +++ b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts @@ -16,12 +16,13 @@ export class AdminSideNavComponent { screen: string; onlyDevMode?: boolean; onlyAdmin?: boolean; + onlyManager?: boolean; userManagerOnly?: boolean; label?: string; }[]; } = { settings: [ - { screen: 'dossier-templates', onlyAdmin: true }, + { screen: 'dossier-templates', onlyManager: true }, { screen: 'digital-signature', onlyAdmin: true }, { screen: 'license-info', label: 'license-information', onlyAdmin: true }, { screen: 'audit', onlyAdmin: true }, @@ -33,9 +34,9 @@ export class AdminSideNavComponent { { screen: 'rules', onlyDevMode: true, label: 'rule-editor' }, { screen: 'default-colors' }, { screen: 'watermark' }, - { screen: 'file-attributes', onlyAdmin: true }, - { screen: 'dossier-attributes', onlyAdmin: true }, - { screen: 'reports', onlyAdmin: true, onlyDevMode: true } + { screen: 'file-attributes' }, + { screen: 'dossier-attributes' }, + { screen: 'reports', onlyDevMode: true } ] }; diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html index b58783552..a77d8178e 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html @@ -7,10 +7,7 @@ > - {{ - 'file-attributes-csv-import.table-header.title' - | translate: { length: allEntities.length } - }} + {{ 'file-attributes-csv-import.table-header.title' | translate: { length: allEntities.length } }} @@ -49,11 +46,7 @@ - @@ -63,14 +56,9 @@
- + - +
- + @@ -110,10 +94,7 @@
{{ field.name }}
-
+
@@ -156,10 +137,7 @@
- +
diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.html index 39e47a368..4269a49d2 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.html @@ -35,7 +35,7 @@ - +
-
+
- {{ - 'dossier-templates-listing.table-header.title' - | translate: { length: (displayedEntities$ | async).length } - }} + {{ 'dossier-templates-listing.table-header.title' | translate: { length: (displayedEntities$ | async).length } }} @@ -55,10 +50,7 @@
-
+
- + - +
-
- +
+
@@ -142,19 +113,14 @@
{{ - 'dossier-templates-listing.dictionaries' - | translate - : { length: dossierTemplate.dictionariesCount } + 'dossier-templates-listing.dictionaries' | translate: { length: dossierTemplate.dictionariesCount } }}
- +
{{ dossierTemplate.dateAdded | date: 'd MMM. yyyy' }} diff --git a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.html index 56268135d..ab90c8b99 100644 --- a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.html @@ -25,22 +25,17 @@
- {{ - 'file-attributes-listing.table-header.title' - | translate: { length: (displayedEntities$ | async)?.length } - }} + {{ 'file-attributes-listing.table-header.title' | translate: { length: (displayedEntities$ | async)?.length } }}
-
+
- + - +
@@ -165,7 +146,7 @@
-
+
@@ -53,7 +54,7 @@
@@ -70,6 +71,7 @@ >
- +
@@ -13,105 +10,80 @@
- {{ - 'trash.table-header.title' - | translate: { length: (displayedEntities$ | async)?.length } - }} + {{ 'trash.table-header.title' | translate: { length: (displayedEntities$ | async)?.length } }}
-
+
- + - +
- +
-
+
{{ entity.dossierName }}
@@ -131,10 +103,7 @@
- +
@@ -148,15 +117,15 @@
diff --git a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts index db6347230..431f0c8e8 100644 --- a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Injector, OnInit } from '@angular/core'; import { AppStateService } from '@state/app-state.service'; import { PermissionsService } from '@services/permissions.service'; -import { Dossier, DossierTemplateModel, StatusControllerService } from '@redaction/red-ui-http'; +import { Dossier, StatusControllerService } from '@redaction/red-ui-http'; import { LoadingService } from '../../../../services/loading.service'; import { AppConfigKey, AppConfigService } from '../../../app-config/app-config.service'; import * as moment from 'moment'; @@ -11,7 +11,6 @@ import { ScreenStateService } from '../../../shared/services/screen-state.servic import { ScreenNames, SortingService } from '../../../../services/sorting.service'; import { BaseListingComponent } from '../../../shared/base/base-listing.component'; import { DossiersService } from '../../../dossier/services/dossiers.service'; -import { tap } from 'rxjs/operators'; @Component({ templateUrl: './trash-screen.component.html', @@ -21,9 +20,7 @@ import { tap } from 'rxjs/operators'; }) export class TrashScreenComponent extends BaseListingComponent implements OnInit { readonly itemSize = 85; - private readonly _deleteRetentionHours = this._appConfigService.getConfig( - AppConfigKey.DELETE_RETENTION_HOURS - ); + private readonly _deleteRetentionHours = this._appConfigService.getConfig(AppConfigKey.DELETE_RETENTION_HOURS); constructor( private readonly _appStateService: AppStateService, diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.html index ef9c5bb44..9d2b61546 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.html @@ -10,10 +10,7 @@
- {{ - 'dossier-listing.table-header.title' - | translate: { length: (displayedEntities$ | async)?.length || 0 } - }} + {{ 'dossier-listing.table-header.title' | translate: { length: (displayedEntities$ | async)?.length || 0 } }} @@ -28,53 +25,33 @@ label="dossier-listing.table-col-names.name" > - + - + - +
- +
-
+
{{ dw.dossierName }}
@@ -107,15 +84,10 @@
- +
- +
- +
diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts index 9334e18d9..548f14a3f 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component, Injector, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core'; +import { Component, Injector, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core'; import { Dossier, DossierTemplateModel } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; import { UserService } from '@services/user.service'; @@ -76,6 +76,18 @@ export class DossierListingScreenComponent extends BaseListingComponent p.dossier.status === Dossier.StatusEnum.ACTIVE).length; + } + + private get _inactiveDossiersCount(): number { + return this._screenStateService.entities.length - this._activeDossiersCount; + } + ngOnInit(): void { this.calculateData(); @@ -135,22 +147,6 @@ export class DossierListingScreenComponent extends BaseListingComponent p.dossier.status === Dossier.StatusEnum.ACTIVE).length; - } - - private get _inactiveDossiersCount(): number { - return this._screenStateService.entities.length - this._activeDossiersCount; - } - calculateData() { this._computeAllFilters(); @@ -173,6 +169,10 @@ export class DossierListingScreenComponent extends BaseListingComponent(); const allDistinctPeople = new Set(); diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.html index bd5fec96a..4b42a0e59 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.html @@ -1,8 +1,8 @@
@@ -41,17 +41,12 @@
- {{ - 'dossier-overview.table-header.title' - | translate: { length: (displayedEntities$ | async)?.length || 0 } - }} + {{ 'dossier-overview.table-header.title' | translate: { length: (displayedEntities$ | async)?.length || 0 } }}
-
+
@@ -86,9 +77,7 @@ label="dossier-overview.table-col-names.added-on" > - + - +
-
- +
+
@@ -169,19 +147,13 @@
- + {{ fileStatus.primaryAttribute }}
-
+
{{ fileStatus.ocrTime | date: 'mediumDate' }}
@@ -196,23 +168,14 @@
- +
- +
- +
@@ -259,10 +222,7 @@
- +
@@ -279,10 +239,4 @@ - + diff --git a/apps/red-ui/src/app/modules/shared/base/base-listing.component.ts b/apps/red-ui/src/app/modules/shared/base/base-listing.component.ts index a6fc8549d..cdb5858b6 100644 --- a/apps/red-ui/src/app/modules/shared/base/base-listing.component.ts +++ b/apps/red-ui/src/app/modules/shared/base/base-listing.component.ts @@ -36,6 +36,10 @@ export abstract class BaseListingComponent { return this._screenStateService.entities$; } + get displayedEntities(): T[] { + return this._screenStateService.displayedEntities; + } + get allEntities(): T[] { return this._screenStateService.entities; } @@ -52,14 +56,22 @@ export abstract class BaseListingComponent { return this._sortingService.getSortingOption(); } - getFilter$(slug: string): Observable { - return this.filterService.getFilter$(slug); - } - get searchForm() { return this._searchService.searchForm; } + get noMatch(): boolean { + return this.allEntities.length && this.displayedEntities?.length === 0; + } + + get noData(): boolean { + return this.allEntities.length === 0; + } + + getFilter$(slug: string): Observable { + return this.filterService.getFilter$(slug); + } + resetFilters() { this.filterService.reset(); } diff --git a/apps/red-ui/src/app/modules/shared/components/filters/quick-filters/quick-filters.component.ts b/apps/red-ui/src/app/modules/shared/components/filters/quick-filters/quick-filters.component.ts index 15fb86b2f..632f0350e 100644 --- a/apps/red-ui/src/app/modules/shared/components/filters/quick-filters/quick-filters.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/filters/quick-filters/quick-filters.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Component, EventEmitter, Output } from '@angular/core'; import { FilterModel } from '../popup-filter/model/filter.model'; import { FilterService } from '@shared/services/filter.service';