diff --git a/apps/red-ui/src/app/app-routing.module.ts b/apps/red-ui/src/app/app-routing.module.ts index 0de22ee9c..8605d0a88 100644 --- a/apps/red-ui/src/app/app-routing.module.ts +++ b/apps/red-ui/src/app/app-routing.module.ts @@ -1,5 +1,12 @@ import { AuthErrorComponent } from '@components/auth-error/auth-error.component'; -import { CompositeRouteGuard, CustomRouteReuseStrategy, IqserAuthGuard, IqserPermissionsGuard, IqserRoutes } from '@iqser/common-ui'; +import { + CompositeRouteGuard, + CustomRouteReuseStrategy, + DEFAULT_REDIRECT_KEY, + IqserAuthGuard, + IqserPermissionsGuard, + IqserRoutes, +} from '@iqser/common-ui'; import { RedRoleGuard } from '@users/red-role.guard'; import { BaseScreenComponent } from '@components/base-screen/base-screen.component'; import { RouteReuseStrategy, RouterModule } from '@angular/router'; @@ -17,6 +24,74 @@ import { DossierFilesGuard } from '@guards/dossier-files-guard'; import { WebViewerLoadedGuard } from './modules/pdf-viewer/services/webviewer-loaded.guard'; import { ROLES } from '@users/roles'; +const dossierTemplateIdRoutes: IqserRoutes = [ + { + path: `${DOSSIERS_ROUTE}`, + children: [ + { + path: `:${DOSSIER_ID}`, + canActivate: [CompositeRouteGuard, IqserPermissionsGuard], + data: { + routeGuards: [DossierFilesGuard], + breadcrumbs: [BreadcrumbTypes.dossierTemplate, BreadcrumbTypes.dossier], + dossiersService: ACTIVE_DOSSIERS_SERVICE, + permissions: { + allow: [ROLES.dossierAttributes.read, ROLES.dossierAttributes.readConfig], + redirectTo: '/auth-error', + }, + }, + loadChildren: () => import('./modules/dossier-overview/dossier-overview.module').then(m => m.DossierOverviewModule), + }, + { + path: `:${DOSSIER_ID}/file/:${FILE_ID}`, + canActivate: [CompositeRouteGuard, IqserPermissionsGuard], + data: { + routeGuards: [DossierFilesGuard, WebViewerLoadedGuard], + breadcrumbs: [BreadcrumbTypes.dossierTemplate, BreadcrumbTypes.dossier, BreadcrumbTypes.file], + dossiersService: ACTIVE_DOSSIERS_SERVICE, + permissions: { + allow: [ROLES.readRedactionLog, ROLES.files.downloadOriginal, ROLES.highlights.read], + redirectTo: '/auth-error', + }, + }, + loadChildren: () => import('./modules/file-preview/file-preview.module').then(m => m.FilePreviewModule), + }, + { + path: '', + pathMatch: 'full', + loadChildren: () => import('./modules/dossiers-listing/dossiers-listing.module').then(m => m.DossiersListingModule), + data: { + breadcrumbs: [BreadcrumbTypes.dossierTemplate], + }, + }, + ], + canActivate: [CompositeRouteGuard, IqserPermissionsGuard], + data: { + routeGuards: [DossiersGuard], + dossiersService: ACTIVE_DOSSIERS_SERVICE, + permissions: { + allow: [ROLES.files.readStatus], + redirectTo: '/auth-error', + }, + }, + }, + { + path: `${ARCHIVE_ROUTE}`, + loadChildren: () => import('./modules/archive/archive.module').then(m => m.ArchiveModule), + canActivate: [CompositeRouteGuard, WebViewerLoadedGuard], + data: { + routeGuards: [FeaturesGuard, DossiersGuard], + dossiersService: ARCHIVED_DOSSIERS_SERVICE, + features: [DOSSIERS_ARCHIVE], + }, + }, + { + path: '**', + redirectTo: `${DOSSIERS_ROUTE}`, + pathMatch: 'full', + }, +]; + const routes: IqserRoutes = [ { path: '', @@ -39,6 +114,13 @@ const routes: IqserRoutes = [ { path: 'admin', loadChildren: () => import('./modules/admin/admin.module').then(m => m.AdminModule), + canActivate: [IqserPermissionsGuard], + data: { + permissions: { + allow: [ROLES.templates.read], + redirectTo: '/auth-error', + }, + }, }, { path: 'dashboard', @@ -48,6 +130,7 @@ const routes: IqserRoutes = [ routeGuards: [IqserAuthGuard, RedRoleGuard, DossierTemplatesGuard, DashboardGuard], permissions: { allow: [ + ROLES.any, ROLES.templates.read, ROLES.fileAttributes.readConfig, ROLES.watermarks.read, @@ -63,94 +146,49 @@ const routes: IqserRoutes = [ { path: 'downloads', component: DownloadsListScreenComponent, - canActivate: [CompositeRouteGuard], + canActivate: [CompositeRouteGuard, IqserPermissionsGuard], data: { routeGuards: [IqserAuthGuard, RedRoleGuard], + permissions: { + allow: ROLES.readDownloadStatus, + redirectTo: '/auth-error', + }, }, }, { path: 'search', loadChildren: () => import('./modules/search/search.module').then(m => m.SearchModule), - canActivate: [CompositeRouteGuard], + canActivate: [CompositeRouteGuard, IqserPermissionsGuard], data: { routeGuards: [IqserAuthGuard, RedRoleGuard], - requiredRoles: ['RED_USER'], + permissions: { + allow: [ROLES.search], + redirectTo: '/auth-error', + }, }, }, { path: 'trash', loadChildren: () => import('./modules/trash/trash.module').then(m => m.TrashModule), - canActivate: [CompositeRouteGuard], + canActivate: [CompositeRouteGuard, IqserPermissionsGuard], data: { routeGuards: [IqserAuthGuard, RedRoleGuard, DossiersGuard, TrashGuard], - requiredRoles: ['RED_USER'], dossiersService: ACTIVE_DOSSIERS_SERVICE, + permissions: { + allow: [ROLES.dossiers.read, ROLES.files.readStatus], + redirectTo: '/auth-error', + }, }, }, { path: `:${DOSSIER_TEMPLATE_ID}`, - children: [ - { - path: `${DOSSIERS_ROUTE}`, - children: [ - { - path: `:${DOSSIER_ID}`, - canActivate: [CompositeRouteGuard], - data: { - routeGuards: [DossierFilesGuard], - breadcrumbs: [BreadcrumbTypes.dossierTemplate, BreadcrumbTypes.dossier], - dossiersService: ACTIVE_DOSSIERS_SERVICE, - }, - loadChildren: () => - import('./modules/dossier-overview/dossier-overview.module').then(m => m.DossierOverviewModule), - }, - { - path: `:${DOSSIER_ID}/file/:${FILE_ID}`, - canActivate: [CompositeRouteGuard], - data: { - routeGuards: [DossierFilesGuard, WebViewerLoadedGuard], - breadcrumbs: [BreadcrumbTypes.dossierTemplate, BreadcrumbTypes.dossier, BreadcrumbTypes.file], - dossiersService: ACTIVE_DOSSIERS_SERVICE, - }, - loadChildren: () => import('./modules/file-preview/file-preview.module').then(m => m.FilePreviewModule), - }, - { - path: '', - pathMatch: 'full', - loadChildren: () => - import('./modules/dossiers-listing/dossiers-listing.module').then(m => m.DossiersListingModule), - data: { - breadcrumbs: [BreadcrumbTypes.dossierTemplate], - }, - }, - ], - canActivate: [CompositeRouteGuard], - data: { - routeGuards: [DossiersGuard], - dossiersService: ACTIVE_DOSSIERS_SERVICE, - }, - }, - { - path: `${ARCHIVE_ROUTE}`, - loadChildren: () => import('./modules/archive/archive.module').then(m => m.ArchiveModule), - canActivate: [CompositeRouteGuard, WebViewerLoadedGuard], - data: { - routeGuards: [FeaturesGuard, DossiersGuard], - dossiersService: ARCHIVED_DOSSIERS_SERVICE, - features: [DOSSIERS_ARCHIVE], - }, - }, - { - path: '**', - redirectTo: `${DOSSIERS_ROUTE}`, - pathMatch: 'full', - }, - ], + children: dossierTemplateIdRoutes, canActivate: [CompositeRouteGuard, IqserPermissionsGuard], data: { routeGuards: [IqserAuthGuard, RedRoleGuard, DossierTemplatesGuard, DashboardGuard, DossierTemplateExistsGuard], permissions: { allow: [ + ROLES.any, ROLES.templates.read, ROLES.fileAttributes.readConfig, ROLES.watermarks.read, @@ -160,7 +198,10 @@ const routes: IqserRoutes = [ ROLES.notifications.read, ROLES.dossiers.read, ], - redirectTo: '/', + redirectTo: { + [ROLES.any]: '/auth-error', + [DEFAULT_REDIRECT_KEY]: '/', + }, }, }, }, diff --git a/apps/red-ui/src/app/components/base-screen/base-screen.component.html b/apps/red-ui/src/app/components/base-screen/base-screen.component.html index cfb80afa6..1789ad6aa 100644 --- a/apps/red-ui/src/app/components/base-screen/base-screen.component.html +++ b/apps/red-ui/src/app/components/base-screen/base-screen.component.html @@ -1,14 +1,16 @@
- + + + -