Skip to content

Commit 33b1503

Browse files
Merge branch 'task/dspace-cris-2023_02_x/DSC-1903' into task/dspace-cris-2023_02_x/DSC-1904
2 parents b95a7e9 + 0463ead commit 33b1503

4 files changed

Lines changed: 56 additions & 9 deletions

File tree

src/app/app-routing.module.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ import { NoPreloading, RouterModule } from '@angular/router';
33
import { AuthBlockingGuard } from './core/auth/auth-blocking.guard';
44

55
import { AuthenticatedGuard } from './core/auth/authenticated.guard';
6-
import {
7-
SiteAdministratorGuard
8-
} from './core/data/feature-authorization/feature-authorization-guard/site-administrator.guard';
6+
7+
98
import {
109
ACCESS_CONTROL_MODULE_PATH,
1110
ADMIN_MODULE_PATH,
@@ -46,6 +45,9 @@ import { ThemedPageErrorComponent } from './page-error/themed-page-error.compone
4645
import { ForgotPasswordCheckGuard } from './core/rest-property/forgot-password-check-guard.guard';
4746
import { SUGGESTION_MODULE_PATH } from './suggestions-page/suggestions-page-routing-paths';
4847
import { RedirectService } from './redirect/redirect.service';
48+
import {
49+
GenericAdministratorGuard
50+
} from './core/data/feature-authorization/feature-authorization-guard/generic-administrator-guard';
4951

5052
@NgModule({
5153
imports: [
@@ -168,7 +170,7 @@ import { RedirectService } from './redirect/redirect.service';
168170
path: ADMIN_MODULE_PATH,
169171
loadChildren: () => import('./admin/admin.module')
170172
.then((m) => m.AdminModule),
171-
canActivate: [SiteAdministratorGuard, EndUserAgreementCurrentUserGuard]
173+
canActivate: [GenericAdministratorGuard, EndUserAgreementCurrentUserGuard]
172174
},
173175
{
174176
path: 'login',
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 { FeatureID } from '../feature-id';
3+
import { AuthorizationDataService } from '../authorization-data.service';
4+
import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
5+
import { Observable, of as observableOf } from 'rxjs';
6+
import { AuthService } from '../../../auth/auth.service';
7+
import { SomeFeatureAuthorizationGuard } from './some-feature-authorization.guard';
8+
9+
/**
10+
* Prevent unauthorized activating and loading of routes when the current authenticated user doesn't have administrator
11+
* rights to the {@link Site}
12+
*/
13+
@Injectable({
14+
providedIn: 'root'
15+
})
16+
export class GenericAdministratorGuard extends SomeFeatureAuthorizationGuard {
17+
constructor(protected authorizationService: AuthorizationDataService, protected router: Router, protected authService: AuthService) {
18+
super(authorizationService, router, authService);
19+
}
20+
21+
/**
22+
* Check administrator authorization rights
23+
*/
24+
getFeatureIDs(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<FeatureID[]> {
25+
return observableOf([
26+
FeatureID.AdministratorOf,
27+
FeatureID.IsCommunityAdmin,
28+
FeatureID.IsCollectionAdmin,
29+
]);
30+
}
31+
}

src/app/menu.resolver.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Injectable } from '@angular/core';
22
import { ActivatedRoute, ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
3-
import { combineLatest as observableCombineLatest, Observable } from 'rxjs';
3+
import { combineLatest, combineLatest as observableCombineLatest, Observable } from 'rxjs';
44
import { MenuID } from './shared/menu/menu-id.model';
55
import { MenuState } from './shared/menu/menu-state.model';
66
import { MenuItemType } from './shared/menu/menu-item-type.model';
@@ -532,8 +532,14 @@ export class MenuResolver implements Resolve<boolean> {
532532
];
533533
menuList.forEach((menuSection) => this.menuService.addSection(MenuID.ADMIN, menuSection));
534534

535-
this.authorizationService.isAuthorized(FeatureID.AdministratorOf).pipe(
536-
filter((authorized: boolean) => authorized),
535+
combineLatest([
536+
this.authorizationService.isAuthorized(FeatureID.AdministratorOf),
537+
this.authorizationService.isAuthorized(FeatureID.IsCommunityAdmin),
538+
this.authorizationService.isAuthorized(FeatureID.IsCollectionAdmin),
539+
]).pipe(
540+
filter(([isAdmin, isCommunityAdmin, isCollectionAdmin]) =>
541+
isAdmin || isCollectionAdmin || isCommunityAdmin
542+
),
537543
take(1),
538544
switchMap(() => this.scriptDataService.scriptWithNameExistsAndCanExecute(METADATA_EXPORT_SCRIPT_NAME)),
539545
filter((metadataExportScriptExists: boolean) => metadataExportScriptExists),
@@ -659,8 +665,14 @@ export class MenuResolver implements Resolve<boolean> {
659665
const menuList = [];
660666
menuList.forEach((menuSection) => this.menuService.addSection(MenuID.ADMIN, menuSection));
661667

662-
this.authorizationService.isAuthorized(FeatureID.AdministratorOf).pipe(
663-
filter((authorized: boolean) => authorized),
668+
combineLatest([
669+
this.authorizationService.isAuthorized(FeatureID.AdministratorOf),
670+
this.authorizationService.isAuthorized(FeatureID.IsCommunityAdmin),
671+
this.authorizationService.isAuthorized(FeatureID.IsCollectionAdmin),
672+
]).pipe(
673+
filter(([isAdmin, isCommunityAdmin, isCollectionAdmin]) =>
674+
isAdmin || isCollectionAdmin || isCommunityAdmin
675+
),
664676
take(1),
665677
switchMap(() => this.scriptDataService.scriptWithNameExistsAndCanExecute(METADATA_IMPORT_SCRIPT_NAME)),
666678
filter((metadataImportScriptExists: boolean) => metadataImportScriptExists),

src/app/shared/upload/file-dropzone-no-uploader/file-dropzone-no-uploader.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
top: 0;
77
left: 0;
88
z-index: -1;
9+
pointer-events: none;
910
}
1011

1112
.ds-document-drop-zone-active {
1213
z-index: var(--ds-drop-zone-area-z-index) !important;
14+
pointer-events: unset;
1315
}
1416

1517
.ds-document-drop-zone-inner {

0 commit comments

Comments
 (0)