From 09b86833283458d724fb3f1bdd9573111c144f92 Mon Sep 17 00:00:00 2001 From: Argiro Kokogiannaki Date: Fri, 12 Jun 2020 10:46:11 +0000 Subject: [PATCH] [Monitor Dashboard|TRunk] Topic - Icon: change topic.iconUrl to icon show it as inner html in sidebars Create AdminDashboardGuard: use it in restricted parts check if portal admin, community curator or monitor curator git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-monitor-portal/trunk/monitor_dashboard@58901 d315682c-612b-4755-9ff5-7f18f6832af3 --- src/app/app.component.ts | 2 +- .../manageStakeholders-routing.module.ts | 4 +- .../manageStakeholders.module.ts | 4 +- src/app/monitor/monitor.component.ts | 2 +- .../stakeholder/stakeholder-routing.module.ts | 4 +- .../stakeholder/stakeholder.component.html | 7 ++-- src/app/stakeholder/stakeholder.component.ts | 9 +++-- src/app/stakeholder/stakeholder.module.ts | 4 +- src/app/topic/topic-routing.module.ts | 4 +- src/app/topic/topic.component.html | 2 +- src/app/topic/topic.component.ts | 2 +- src/app/topic/topic.module.ts | 4 +- src/app/utils/adminDashboard.guard.ts | 39 +++++++++++++++++++ 13 files changed, 65 insertions(+), 22 deletions(-) create mode 100644 src/app/utils/adminDashboard.guard.ts diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 93e80ec..4ccbf0b 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -145,7 +145,7 @@ export class AppComponent implements OnInit, OnDestroy { } if (this.adminMenuItems.length == 0) { //nstructor(id: string, name: string, route: string, items: Item[], icon, open: boolean) { - this.adminMenuItems.push(new MenuItem("stakeholders", "Manage Stakeholders", "", "/admin", false, [], [], {}, "settings")); + this.adminMenuItems.push(new MenuItem("stakeholders", "Manage Stakeholders", "", "/admin", false, [], [], {}, "settings")); /*let adminOptions = new MenuItem("adminOptions", "Admin Options", "", "", false, [], [], {}) adminOptions.items.push(new MenuItem("pages", "Pages", "", "/pages", false, [], [], {})); adminOptions.items.push(new MenuItem("portals", "Portals", "", "/portals", false, [], [], {})); diff --git a/src/app/manageStakeholders/manageStakeholders-routing.module.ts b/src/app/manageStakeholders/manageStakeholders-routing.module.ts index b4817f7..093fe70 100644 --- a/src/app/manageStakeholders/manageStakeholders-routing.module.ts +++ b/src/app/manageStakeholders/manageStakeholders-routing.module.ts @@ -2,7 +2,7 @@ import {NgModule} from '@angular/core'; import {RouterModule} from '@angular/router'; import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; import {ManageStakeholdersComponent} from "./manageStakeholders.component"; -import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; +import {AdminDashboardGuard} from "../utils/adminDashboard.guard"; @NgModule({ imports: [ @@ -10,7 +10,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; { path: '', component: ManageStakeholdersComponent, - canActivate: [LoginGuard], + canActivate: [AdminDashboardGuard], canDeactivate: [PreviousRouteRecorder], data: {hasSidebar: true} } diff --git a/src/app/manageStakeholders/manageStakeholders.module.ts b/src/app/manageStakeholders/manageStakeholders.module.ts index ea380f3..8f2687f 100644 --- a/src/app/manageStakeholders/manageStakeholders.module.ts +++ b/src/app/manageStakeholders/manageStakeholders.module.ts @@ -8,7 +8,7 @@ import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/i import {LoadingModule} from "../openaireLibrary/dashboard/sharedComponents/loading/loading.module"; import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module"; import {ReactiveFormsModule} from "@angular/forms"; -import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; +import {AdminDashboardGuard} from "../utils/adminDashboard.guard"; @NgModule({ declarations: [ManageStakeholdersComponent], @@ -22,7 +22,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; ReactiveFormsModule ], providers: [ - LoginGuard, PreviousRouteRecorder, + AdminDashboardGuard, PreviousRouteRecorder, ], exports: [ManageStakeholdersComponent] }) diff --git a/src/app/monitor/monitor.component.ts b/src/app/monitor/monitor.component.ts index 96448a9..efc31e4 100644 --- a/src/app/monitor/monitor.component.ts +++ b/src/app/monitor/monitor.component.ts @@ -256,7 +256,7 @@ export class MonitorComponent implements OnInit, OnDestroy, IDeactivateComponent let topicItem: MenuItem = new MenuItem(topic.alias, topic.name, "", ( '/' + this.stakeholder.alias + '/' + topic.alias ), null, [], [], {}); - topicItem.icon = topic.iconUrl; + topicItem.icon = topic.icon; items.push(topicItem); } }); diff --git a/src/app/stakeholder/stakeholder-routing.module.ts b/src/app/stakeholder/stakeholder-routing.module.ts index 00f747d..900fbc3 100644 --- a/src/app/stakeholder/stakeholder-routing.module.ts +++ b/src/app/stakeholder/stakeholder-routing.module.ts @@ -3,7 +3,7 @@ import {RouterModule} from '@angular/router'; import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; import {StakeholderComponent} from "./stakeholder.component"; import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard"; -import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; +import {AdminDashboardGuard} from "../utils/adminDashboard.guard"; @NgModule({ imports: [ @@ -11,7 +11,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; { path: '', component: StakeholderComponent, - canActivate: [LoginGuard], + canActivate: [AdminDashboardGuard], canDeactivate: [PreviousRouteRecorder, CanExitGuard] } ]) diff --git a/src/app/stakeholder/stakeholder.component.html b/src/app/stakeholder/stakeholder.component.html index 76d7ebd..f83c17f 100644 --- a/src/app/stakeholder/stakeholder.component.html +++ b/src/app/stakeholder/stakeholder.component.html @@ -29,8 +29,9 @@
  • - {{topic.icon}} + + + @@ -119,7 +120,7 @@
    -
    diff --git a/src/app/stakeholder/stakeholder.component.ts b/src/app/stakeholder/stakeholder.component.ts index f2a374e..3112f5e 100644 --- a/src/app/stakeholder/stakeholder.component.ts +++ b/src/app/stakeholder/stakeholder.component.ts @@ -1,6 +1,6 @@ import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core'; import {ActivatedRoute, Router} from '@angular/router'; -import {Title} from '@angular/platform-browser'; +import {DomSanitizer, Title} from '@angular/platform-browser'; import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties'; import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes'; @@ -42,7 +42,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo private title: Title, private layoutService: LayoutService, private fb: FormBuilder, - private stakeholderService: StakeholderService) { + private stakeholderService: StakeholderService, private sanitizer: DomSanitizer) { this.errorCodes = new ErrorCodes(); this.errorMessages = new ErrorMessagesComponent(); } @@ -97,7 +97,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo isPublic: this.fb.control(topic.isPublic), defaultId: this.fb.control(topic.defaultId), categories: this.fb.control(topic.categories), - iconUrl: this.fb.control(topic.iconUrl) + icon: this.fb.control(topic.icon) }); this.subscriptions.push(this.form.get('name').valueChanges.subscribe(value => { let i = 1; @@ -233,4 +233,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo }); }); } + satinizeHTML(html){ + return this.sanitizer.bypassSecurityTrustHtml(html); + } } diff --git a/src/app/stakeholder/stakeholder.module.ts b/src/app/stakeholder/stakeholder.module.ts index 4544492..76c649e 100644 --- a/src/app/stakeholder/stakeholder.module.ts +++ b/src/app/stakeholder/stakeholder.module.ts @@ -10,7 +10,7 @@ import {StakeholderComponent} from "./stakeholder.component"; import {StakeholderRoutingModule} from "./stakeholder-routing.module"; import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module"; import {ClickModule} from "../openaireLibrary/utils/click/click.module"; -import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; +import {AdminDashboardGuard} from "../utils/adminDashboard.guard"; @NgModule({ imports: [ @@ -20,7 +20,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; StakeholderComponent ], providers: [ - LoginGuard, PreviousRouteRecorder, + AdminDashboardGuard, PreviousRouteRecorder, PiwikService ], exports: [ diff --git a/src/app/topic/topic-routing.module.ts b/src/app/topic/topic-routing.module.ts index 9386b63..71b27c9 100644 --- a/src/app/topic/topic-routing.module.ts +++ b/src/app/topic/topic-routing.module.ts @@ -3,7 +3,7 @@ import {RouterModule} from '@angular/router'; import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; import {TopicComponent} from "./topic.component"; import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard"; -import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; +import {AdminDashboardGuard} from "../utils/adminDashboard.guard"; @NgModule({ imports: [ @@ -11,7 +11,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; { path: '', component: TopicComponent, - canActivate: [LoginGuard], + canActivate: [AdminDashboardGuard], canDeactivate: [PreviousRouteRecorder, CanExitGuard] } ]) diff --git a/src/app/topic/topic.component.html b/src/app/topic/topic.component.html index 4c920bb..3d78621 100644 --- a/src/app/topic/topic.component.html +++ b/src/app/topic/topic.component.html @@ -130,7 +130,7 @@
    -
    diff --git a/src/app/topic/topic.component.ts b/src/app/topic/topic.component.ts index a2c9e8e..1f4c66b 100644 --- a/src/app/topic/topic.component.ts +++ b/src/app/topic/topic.component.ts @@ -138,7 +138,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent { isPublic: this.fb.control(topic.isPublic), defaultId: this.fb.control(topic.defaultId), categories: this.fb.control(topic.categories), - iconUrl: this.fb.control(topic.iconUrl) + icon: this.fb.control(topic.icon) }); this.subscriptions.push(this.form.get('name').valueChanges.subscribe(value => { let i = 1; diff --git a/src/app/topic/topic.module.ts b/src/app/topic/topic.module.ts index 3a380b0..49c99ea 100644 --- a/src/app/topic/topic.module.ts +++ b/src/app/topic/topic.module.ts @@ -13,7 +13,7 @@ import {IndicatorsComponent} from "./indicators.component"; import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module"; import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module"; import {ClickModule} from "../openaireLibrary/utils/click/click.module"; -import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; +import {AdminDashboardGuard} from "../utils/adminDashboard.guard"; @NgModule({ imports: [ @@ -24,7 +24,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; TopicComponent, IndicatorsComponent ], providers: [ - LoginGuard, PreviousRouteRecorder, + AdminDashboardGuard, PreviousRouteRecorder, PiwikService ], exports: [ diff --git a/src/app/utils/adminDashboard.guard.ts b/src/app/utils/adminDashboard.guard.ts new file mode 100644 index 0000000..b80b0b4 --- /dev/null +++ b/src/app/utils/adminDashboard.guard.ts @@ -0,0 +1,39 @@ +import {Injectable} from '@angular/core'; +import {ActivatedRouteSnapshot, CanActivate, CanLoad, Route, Router, RouterStateSnapshot} from '@angular/router'; +import {Observable} from 'rxjs/Observable'; + +import {filter, map} from "rxjs/operators"; +import {UserManagementService} from "../openaireLibrary/services/user-management.service"; +import {LoginErrorCodes} from "../openaireLibrary/login/utils/guardHelper.class"; +import {Session} from "../openaireLibrary/login/utils/helper.class"; + +@Injectable() +export class AdminDashboardGuard implements CanActivate, CanLoad { + + constructor(private router: Router, + private userManagementService: UserManagementService) { + } + + check(path: string): Observable | boolean { + if (Session.isLoggedIn()) { + const obs = this.userManagementService.getUserInfo(false).pipe(map(user => { + return (Session.isPortalAdministrator(user) || Session.isCommunityCurator(user) || Session.isMonitorCurator(user)); + })); + obs.pipe(filter(isLoggedIn => !isLoggedIn)).subscribe(() => { + this.router.navigate(['/user-info'], {queryParams: {'errorCode': LoginErrorCodes.NOT_ADMIN, path}}); + }); + return obs; + } else { + this.router.navigate(['/user-info'], {queryParams: {'errorCode': LoginErrorCodes.NOT_LOGIN, path}}); + return false; + } + } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | boolean { + return this.check(state.url); + } + + canLoad(route: Route): Observable | Promise | boolean { + return this.check('/' + route.path); + } +}