Skip to content

Commit 959d592

Browse files
authored
Merge pull request DSpace#2637 from DSpace/backport-2632-to-dspace-7_x
[Port dspace-7_x] Fixes "some item edit pages are accessible by anonymous users"
2 parents 0a3502e + 94866ca commit 959d592

3 files changed

Lines changed: 70 additions & 2 deletions

File tree

src/app/item-page/edit-item-page/edit-item-page.routing.module.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ import { ItemPageBitstreamsGuard } from './item-page-bitstreams.guard';
3838
import { ItemPageRelationshipsGuard } from './item-page-relationships.guard';
3939
import { ItemPageVersionHistoryGuard } from './item-page-version-history.guard';
4040
import { ItemPageCollectionMapperGuard } from './item-page-collection-mapper.guard';
41+
import { ItemPageCurateGuard } from './item-page-curate.guard';
42+
import { ItemPageAccessControlGuard } from './item-page-access-control.guard';
4143
import { ThemedDsoEditMetadataComponent } from '../../dso-shared/dso-edit-metadata/themed-dso-edit-metadata.component';
4244
import { ItemPageRegisterDoiGuard } from './item-page-register-doi.guard';
4345
import { ItemCurateComponent } from './item-curate/item-curate.component';
@@ -87,7 +89,8 @@ import { ItemAccessControlComponent } from './item-access-control/item-access-co
8789
{
8890
path: 'curate',
8991
component: ItemCurateComponent,
90-
data: { title: 'item.edit.tabs.curate.title', showBreadcrumbs: true }
92+
data: { title: 'item.edit.tabs.curate.title', showBreadcrumbs: true },
93+
canActivate: [ItemPageCurateGuard]
9194
},
9295
{
9396
path: 'relationships',
@@ -116,7 +119,8 @@ import { ItemAccessControlComponent } from './item-access-control/item-access-co
116119
{
117120
path: 'access-control',
118121
component: ItemAccessControlComponent,
119-
data: { title: 'item.edit.tabs.access-control.title', showBreadcrumbs: true }
122+
data: { title: 'item.edit.tabs.access-control.title', showBreadcrumbs: true },
123+
canActivate: [ItemPageAccessControlGuard]
120124
},
121125
{
122126
path: 'mapper',
@@ -202,11 +206,13 @@ import { ItemAccessControlComponent } from './item-access-control/item-access-co
202206
ItemPageWithdrawGuard,
203207
ItemPageAdministratorGuard,
204208
ItemPageMetadataGuard,
209+
ItemPageCurateGuard,
205210
ItemPageStatusGuard,
206211
ItemPageBitstreamsGuard,
207212
ItemPageRelationshipsGuard,
208213
ItemPageVersionHistoryGuard,
209214
ItemPageCollectionMapperGuard,
215+
ItemPageAccessControlGuard,
210216
ItemPageRegisterDoiGuard,
211217
]
212218
})
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { Injectable } from '@angular/core';
2+
import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
3+
import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service';
4+
import { ItemPageResolver } from '../item-page.resolver';
5+
import { Item } from '../../core/shared/item.model';
6+
import { DsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard';
7+
import { Observable, of as observableOf } from 'rxjs';
8+
import { FeatureID } from '../../core/data/feature-authorization/feature-id';
9+
import { AuthService } from '../../core/auth/auth.service';
10+
11+
@Injectable({
12+
providedIn: 'root'
13+
})
14+
/**
15+
* Guard for preventing unauthorized access to certain {@link Item} pages requiring administrator rights
16+
*/
17+
export class ItemPageAccessControlGuard extends DsoPageSingleFeatureGuard<Item> {
18+
constructor(protected resolver: ItemPageResolver,
19+
protected authorizationService: AuthorizationDataService,
20+
protected router: Router,
21+
protected authService: AuthService) {
22+
super(resolver, authorizationService, router, authService);
23+
}
24+
25+
/**
26+
* Check administrator authorization rights
27+
*/
28+
getFeatureID(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<FeatureID> {
29+
return observableOf(FeatureID.AdministratorOf);
30+
}
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { Injectable } from '@angular/core';
2+
import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
3+
import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service';
4+
import { ItemPageResolver } from '../item-page.resolver';
5+
import { Item } from '../../core/shared/item.model';
6+
import { DsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard';
7+
import { Observable, of as observableOf } from 'rxjs';
8+
import { FeatureID } from '../../core/data/feature-authorization/feature-id';
9+
import { AuthService } from '../../core/auth/auth.service';
10+
11+
@Injectable({
12+
providedIn: 'root'
13+
})
14+
/**
15+
* Guard for preventing unauthorized access to certain {@link Item} pages requiring administrator rights
16+
*/
17+
export class ItemPageCurateGuard extends DsoPageSingleFeatureGuard<Item> {
18+
constructor(protected resolver: ItemPageResolver,
19+
protected authorizationService: AuthorizationDataService,
20+
protected router: Router,
21+
protected authService: AuthService) {
22+
super(resolver, authorizationService, router, authService);
23+
}
24+
25+
/**
26+
* Check administrator authorization rights
27+
*/
28+
getFeatureID(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<FeatureID> {
29+
return observableOf(FeatureID.AdministratorOf);
30+
}
31+
}

0 commit comments

Comments
 (0)