From ccf1cc45473a8a92d117215adc0eb650a27d6d77 Mon Sep 17 00:00:00 2001 From: Vlad Nouski Date: Fri, 10 Nov 2023 14:38:56 +0100 Subject: [PATCH 1/3] [DURACOM-202] feature: item edit pages are accessible by administrator --- .../edit-item-page.routing.module.ts | 10 ++++-- .../item-page-access-control.guard.ts | 31 +++++++++++++++++++ .../edit-item-page/item-page-curate.guard.ts | 31 +++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/app/item-page/edit-item-page/item-page-access-control.guard.ts create mode 100644 src/app/item-page/edit-item-page/item-page-curate.guard.ts diff --git a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts index f22027916f..5266b1b926 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts @@ -38,6 +38,8 @@ import { ItemPageBitstreamsGuard } from './item-page-bitstreams.guard'; import { ItemPageRelationshipsGuard } from './item-page-relationships.guard'; import { ItemPageVersionHistoryGuard } from './item-page-version-history.guard'; import { ItemPageCollectionMapperGuard } from './item-page-collection-mapper.guard'; +import { ItemPageCurateGuard } from './item-page-curate.guard'; +import { ItemPageAccessControlGuard } from './item-page-access-control.guard'; import { ThemedDsoEditMetadataComponent } from '../../dso-shared/dso-edit-metadata/themed-dso-edit-metadata.component'; import { ItemPageRegisterDoiGuard } from './item-page-register-doi.guard'; import { ItemCurateComponent } from './item-curate/item-curate.component'; @@ -87,7 +89,8 @@ import { ItemAccessControlComponent } from './item-access-control/item-access-co { path: 'curate', component: ItemCurateComponent, - data: { title: 'item.edit.tabs.curate.title', showBreadcrumbs: true } + data: { title: 'item.edit.tabs.curate.title', showBreadcrumbs: true }, + canActivate: [ItemPageCurateGuard] }, { path: 'relationships', @@ -116,7 +119,8 @@ import { ItemAccessControlComponent } from './item-access-control/item-access-co { path: 'access-control', component: ItemAccessControlComponent, - data: { title: 'item.edit.tabs.access-control.title', showBreadcrumbs: true } + data: { title: 'item.edit.tabs.access-control.title', showBreadcrumbs: true }, + canActivate: [ItemPageAccessControlGuard] }, { path: 'mapper', @@ -202,11 +206,13 @@ import { ItemAccessControlComponent } from './item-access-control/item-access-co ItemPageWithdrawGuard, ItemPageAdministratorGuard, ItemPageMetadataGuard, + ItemPageCurateGuard, ItemPageStatusGuard, ItemPageBitstreamsGuard, ItemPageRelationshipsGuard, ItemPageVersionHistoryGuard, ItemPageCollectionMapperGuard, + ItemPageAccessControlGuard, ItemPageRegisterDoiGuard, ] }) diff --git a/src/app/item-page/edit-item-page/item-page-access-control.guard.ts b/src/app/item-page/edit-item-page/item-page-access-control.guard.ts new file mode 100644 index 0000000000..49975e5cfe --- /dev/null +++ b/src/app/item-page/edit-item-page/item-page-access-control.guard.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router'; +import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; +import { ItemPageResolver } from '../item-page.resolver'; +import { Item } from '../../core/shared/item.model'; +import { DsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; +import { Observable, of as observableOf } from 'rxjs'; +import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { AuthService } from '../../core/auth/auth.service'; + +@Injectable({ + providedIn: 'root' +}) +/** + * Guard for preventing unauthorized access to certain {@link Item} pages requiring manage mappings rights + */ +export class ItemPageAccessControlGuard extends DsoPageSingleFeatureGuard { + constructor(protected resolver: ItemPageResolver, + protected authorizationService: AuthorizationDataService, + protected router: Router, + protected authService: AuthService) { + super(resolver, authorizationService, router, authService); + } + + /** + * Check manage mappings authorization rights + */ + getFeatureID(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + return observableOf(FeatureID.AdministratorOf); + } +} diff --git a/src/app/item-page/edit-item-page/item-page-curate.guard.ts b/src/app/item-page/edit-item-page/item-page-curate.guard.ts new file mode 100644 index 0000000000..b0594e016b --- /dev/null +++ b/src/app/item-page/edit-item-page/item-page-curate.guard.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router'; +import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; +import { ItemPageResolver } from '../item-page.resolver'; +import { Item } from '../../core/shared/item.model'; +import { DsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; +import { Observable, of as observableOf } from 'rxjs'; +import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { AuthService } from '../../core/auth/auth.service'; + +@Injectable({ + providedIn: 'root' +}) +/** + * Guard for preventing unauthorized access to certain {@link Item} pages requiring edit metadata rights + */ +export class ItemPageCurateGuard extends DsoPageSingleFeatureGuard { + constructor(protected resolver: ItemPageResolver, + protected authorizationService: AuthorizationDataService, + protected router: Router, + protected authService: AuthService) { + super(resolver, authorizationService, router, authService); + } + + /** + * Check edit curate authorization rights + */ + getFeatureID(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + return observableOf(FeatureID.AdministratorOf); + } +} From b6d515ff09011d6ceef358c6836f2616cc059657 Mon Sep 17 00:00:00 2001 From: Vlad Nouski Date: Fri, 10 Nov 2023 15:09:02 +0100 Subject: [PATCH 2/3] [DURACOM-202] refactor: code --- .../item-page/edit-item-page/item-page-access-control.guard.ts | 2 +- src/app/item-page/edit-item-page/item-page-curate.guard.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/item-page/edit-item-page/item-page-access-control.guard.ts b/src/app/item-page/edit-item-page/item-page-access-control.guard.ts index 49975e5cfe..a036fd9576 100644 --- a/src/app/item-page/edit-item-page/item-page-access-control.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-access-control.guard.ts @@ -12,7 +12,7 @@ import { AuthService } from '../../core/auth/auth.service'; providedIn: 'root' }) /** - * Guard for preventing unauthorized access to certain {@link Item} pages requiring manage mappings rights + * Guard for preventing unauthorized access to certain {@link Item} pages requiring administrator rights */ export class ItemPageAccessControlGuard extends DsoPageSingleFeatureGuard { constructor(protected resolver: ItemPageResolver, diff --git a/src/app/item-page/edit-item-page/item-page-curate.guard.ts b/src/app/item-page/edit-item-page/item-page-curate.guard.ts index b0594e016b..40f9444524 100644 --- a/src/app/item-page/edit-item-page/item-page-curate.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-curate.guard.ts @@ -12,7 +12,7 @@ import { AuthService } from '../../core/auth/auth.service'; providedIn: 'root' }) /** - * Guard for preventing unauthorized access to certain {@link Item} pages requiring edit metadata rights + * Guard for preventing unauthorized access to certain {@link Item} pages requiring administrator rights */ export class ItemPageCurateGuard extends DsoPageSingleFeatureGuard { constructor(protected resolver: ItemPageResolver, From 6f64db1645623d9ac735ccab107439c77cc9969f Mon Sep 17 00:00:00 2001 From: Vlad Nouski Date: Fri, 10 Nov 2023 15:11:09 +0100 Subject: [PATCH 3/3] [DURACOM-202] refactor: code --- .../item-page/edit-item-page/item-page-access-control.guard.ts | 2 +- src/app/item-page/edit-item-page/item-page-curate.guard.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/item-page/edit-item-page/item-page-access-control.guard.ts b/src/app/item-page/edit-item-page/item-page-access-control.guard.ts index a036fd9576..9bc953db1e 100644 --- a/src/app/item-page/edit-item-page/item-page-access-control.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-access-control.guard.ts @@ -23,7 +23,7 @@ export class ItemPageAccessControlGuard extends DsoPageSingleFeatureGuard } /** - * Check manage mappings authorization rights + * Check administrator authorization rights */ getFeatureID(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { return observableOf(FeatureID.AdministratorOf); diff --git a/src/app/item-page/edit-item-page/item-page-curate.guard.ts b/src/app/item-page/edit-item-page/item-page-curate.guard.ts index 40f9444524..387b1b8bb9 100644 --- a/src/app/item-page/edit-item-page/item-page-curate.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-curate.guard.ts @@ -23,7 +23,7 @@ export class ItemPageCurateGuard extends DsoPageSingleFeatureGuard { } /** - * Check edit curate authorization rights + * Check administrator authorization rights */ getFeatureID(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { return observableOf(FeatureID.AdministratorOf);