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 @@