diff --git a/apps/red-ui/src/app/app.module.ts b/apps/red-ui/src/app/app.module.ts
index 7591df031..253ffde75 100644
--- a/apps/red-ui/src/app/app.module.ts
+++ b/apps/red-ui/src/app/app.module.ts
@@ -95,6 +95,8 @@ import { UserListingScreenComponent } from './screens/admin/users/user-listing-s
import { NotificationsComponent } from './components/notifications/notifications.component';
import { RulesScreenComponent } from './screens/admin/rules-screen/rules-screen.component';
import { WatermarkScreenComponent } from './screens/admin/watermark-screen/watermark-screen.component';
+import { PdfViewerScreenComponent } from './screens/pdf-viewer-screen/pdf-viewer-screen.component';
+import { HtmlDebugScreenComponent } from './screens/html-debug-screen/html-debug-screen.component';
export function HttpLoaderFactory(httpClient: HttpClient) {
return new TranslateHttpLoader(httpClient, '/assets/i18n/', '.json');
@@ -115,6 +117,23 @@ const routes = [
path: 'info',
component: AppInfoComponent
},
+ {
+ path: 'pdf-preview/:fileId',
+ component: PdfViewerScreenComponent,
+ canActivate: [CompositeRouteGuard],
+ data: {
+ routeGuards: [AuthGuard, RedRoleGuard]
+ }
+ },
+ {
+ path: 'html-debug/:fileId',
+ component: HtmlDebugScreenComponent,
+ canActivate: [CompositeRouteGuard],
+ data: {
+ routeGuards: [AuthGuard, RedRoleGuard]
+ }
+ },
+
{
path: 'ui',
component: BaseScreenComponent,
@@ -184,7 +203,8 @@ const routes = [
component: WatermarkScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
- routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
+ routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard],
+ requiredRoles: ['RED_ADMIN']
}
}
]
@@ -269,7 +289,9 @@ const matImports = [
UserListingScreenComponent,
NotificationsComponent,
RulesScreenComponent,
- WatermarkScreenComponent
+ WatermarkScreenComponent,
+ PdfViewerScreenComponent,
+ HtmlDebugScreenComponent
],
imports: [
BrowserModule,
diff --git a/apps/red-ui/src/app/auth/red-role.guard.ts b/apps/red-ui/src/app/auth/red-role.guard.ts
index 19870efbc..743bcc76d 100644
--- a/apps/red-ui/src/app/auth/red-role.guard.ts
+++ b/apps/red-ui/src/app/auth/red-role.guard.ts
@@ -18,13 +18,27 @@ export class RedRoleGuard implements CanActivate {
obs.next(false);
obs.complete();
} else {
+ // we have at least 1 RED Role -> if it's not user he must be admin
if (!this._userService.isUser() && state.url.startsWith('/ui/projects')) {
this._router.navigate(['/ui/admin']);
obs.next(false);
obs.complete();
+ return;
+ }
+ if (route.data.requiredRoles) {
+ if (this._userService.hasAnyRole(route.data.requiredRoles)) {
+ obs.next(true);
+ obs.complete();
+ } else {
+ console.log('this case');
+ this._router.navigate(['/ui/projects']);
+ obs.next(false);
+ obs.complete();
+ }
+ } else {
+ obs.next(true);
+ obs.complete();
}
- obs.next(true);
- obs.complete();
}
});
}
diff --git a/apps/red-ui/src/app/components/admin-page-header/admin-breadcrumbs.component.html b/apps/red-ui/src/app/components/admin-page-header/admin-breadcrumbs.component.html
index 41b3ad694..2bedc5574 100644
--- a/apps/red-ui/src/app/components/admin-page-header/admin-breadcrumbs.component.html
+++ b/apps/red-ui/src/app/components/admin-page-header/admin-breadcrumbs.component.html
@@ -14,7 +14,7 @@
[routerLinkActiveOptions]="{ exact: true }"
routerLinkActive="active"
translate="rule-editor"
- *ngIf="screen === 'rules' || root"
+ *ngIf="(screen === 'rules' || root) && userPreferenceService.areDevFeaturesEnabled"
>
diff --git a/apps/red-ui/src/app/components/admin-page-header/admin-breadcrumbs.component.ts b/apps/red-ui/src/app/components/admin-page-header/admin-breadcrumbs.component.ts
index 8be407e0d..afd0adb8f 100644
--- a/apps/red-ui/src/app/components/admin-page-header/admin-breadcrumbs.component.ts
+++ b/apps/red-ui/src/app/components/admin-page-header/admin-breadcrumbs.component.ts
@@ -2,6 +2,8 @@ import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { TypeValue } from '@redaction/red-ui-http';
import { AppStateService } from '../../state/app-state.service';
+import { UserPreferenceService } from '../../common/service/user-preference.service';
+import { PermissionsService } from '../../common/service/permissions.service';
@Component({
selector: 'redaction-admin-breadcrumbs',
@@ -13,7 +15,12 @@ export class AdminBreadcrumbsComponent implements OnInit {
public root: boolean;
public screen: string;
- constructor(private readonly _activatedRoute: ActivatedRoute, private _appStateService: AppStateService) {
+ constructor(
+ public readonly userPreferenceService: UserPreferenceService,
+ public readonly permissionService: PermissionsService,
+ private readonly _activatedRoute: ActivatedRoute,
+ private readonly _appStateService: AppStateService
+ ) {
this._activatedRoute.params.subscribe((params) => {
const url = this._activatedRoute.snapshot.url;
this.root = url.length === 1;
diff --git a/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.html b/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.html
index 71df39fbd..f98ba2b58 100644
--- a/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.html
+++ b/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.html
@@ -11,7 +11,7 @@
-