diff --git a/src/app/access-control/access-control-routes.ts b/src/app/access-control/access-control-routes.ts index a7cce461ef..ef36a19052 100644 --- a/src/app/access-control/access-control-routes.ts +++ b/src/app/access-control/access-control-routes.ts @@ -9,8 +9,6 @@ import { } from '@ng-dynamic-forms/core'; import { i18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; -import { GroupAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/group-administrator.guard'; -import { SiteAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; import { EPERSON_PATH, GROUP_PATH, @@ -20,8 +18,10 @@ import { EPeopleRegistryComponent } from './epeople-registry/epeople-registry.co import { EPersonFormComponent } from './epeople-registry/eperson-form/eperson-form.component'; import { EPersonResolver } from './epeople-registry/eperson-resolver.service'; import { GroupFormComponent } from './group-registry/group-form/group-form.component'; -import { GroupPageGuard } from './group-registry/group-page.guard'; import { GroupsRegistryComponent } from './group-registry/groups-registry.component'; +import { + siteAdministratorGuard +} from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; /** * Condition for displaying error messages on email form field @@ -46,7 +46,7 @@ export const ROUTES: Route[] = [ }, providers, data: { title: 'admin.access-control.epeople.title', breadcrumbKey: 'admin.access-control.epeople' }, - canActivate: mapToCanActivate([SiteAdministratorGuard]), + canActivate: [siteAdministratorGuard], }, { path: `${EPERSON_PATH}/create`, @@ -56,7 +56,7 @@ export const ROUTES: Route[] = [ }, providers, data: { title: 'admin.access-control.epeople.add.title', breadcrumbKey: 'admin.access-control.epeople.add' }, - canActivate: mapToCanActivate([SiteAdministratorGuard]), + canActivate: [siteAdministratorGuard], }, { path: `${EPERSON_PATH}/:id/edit`, @@ -67,7 +67,7 @@ export const ROUTES: Route[] = [ }, providers, data: { title: 'admin.access-control.epeople.edit.title', breadcrumbKey: 'admin.access-control.epeople.edit' }, - canActivate: mapToCanActivate([SiteAdministratorGuard]), + canActivate: [siteAdministratorGuard], }, { path: GROUP_PATH, @@ -77,7 +77,7 @@ export const ROUTES: Route[] = [ }, providers, data: { title: 'admin.access-control.groups.title', breadcrumbKey: 'admin.access-control.groups' }, - canActivate: mapToCanActivate([GroupAdministratorGuard]), + canActivate: [siteAdministratorGuard], }, { path: `${GROUP_PATH}/create`, @@ -90,7 +90,7 @@ export const ROUTES: Route[] = [ title: 'admin.access-control.groups.title.addGroup', breadcrumbKey: 'admin.access-control.groups.addGroup', }, - canActivate: mapToCanActivate([GroupAdministratorGuard]), + canActivate: [siteAdministratorGuard], }, { path: `${GROUP_PATH}/:groupId/edit`, @@ -103,7 +103,7 @@ export const ROUTES: Route[] = [ title: 'admin.access-control.groups.title.singleGroup', breadcrumbKey: 'admin.access-control.groups.singleGroup', }, - canActivate: mapToCanActivate([GroupPageGuard]), + canActivate: [siteAdministratorGuard], }, { path: 'bulk-access', @@ -112,6 +112,6 @@ export const ROUTES: Route[] = [ breadcrumb: i18nBreadcrumbResolver, }, data: { title: 'admin.access-control.bulk-access.title', breadcrumbKey: 'admin.access-control.bulk-access' }, - canActivate: mapToCanActivate([SiteAdministratorGuard]), + canActivate: [siteAdministratorGuard], }, ]; diff --git a/src/app/access-control/group-registry/group-page.guard.spec.ts b/src/app/access-control/group-registry/group-page.guard.spec.ts index 9a301faab0..3024e42d64 100644 --- a/src/app/access-control/group-registry/group-page.guard.spec.ts +++ b/src/app/access-control/group-registry/group-page.guard.spec.ts @@ -1,11 +1,23 @@ -import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; -import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; -import { ActivatedRouteSnapshot, Router, UrlTree } from '@angular/router'; -import { of as observableOf, Observable } from 'rxjs'; +import { + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + ActivatedRouteSnapshot, + Router, + UrlTree, +} from '@angular/router'; +import { + Observable, + of as observableOf, +} from 'rxjs'; + import { AuthService } from '../../core/auth/auth.service'; -import { TestBed, waitForAsync } from '@angular/core/testing'; -import { groupPageGuard } from './group-page.guard'; +import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; +import { groupPageGuard } from './group-page.guard'; + jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; // Increase timeout to 10 seconds describe('GroupPageGuard', () => { @@ -15,7 +27,7 @@ describe('GroupPageGuard', () => { const routeSnapshotWithGroupId = { params: { groupId: groupUuid, - } + }, } as unknown as ActivatedRouteSnapshot; let halEndpointService: HALEndpointService; @@ -42,7 +54,7 @@ describe('GroupPageGuard', () => { { provide: Router, useValue: router }, { provide: AuthService, useValue: authService }, { provide: HALEndpointService, useValue: halEndpointService }, - ] + ], }); } @@ -67,7 +79,7 @@ describe('GroupPageGuard', () => { result$.subscribe((result) => { expect(authorizationService.isAuthorized).toHaveBeenCalledWith( - FeatureID.CanManageGroup, groupEndpointUrl, undefined + FeatureID.CanManageGroup, groupEndpointUrl, undefined, ); expect(result).toBeTrue(); done(); @@ -87,7 +99,7 @@ describe('GroupPageGuard', () => { result$.subscribe((result) => { expect(authorizationService.isAuthorized).toHaveBeenCalledWith( - FeatureID.CanManageGroup, groupEndpointUrl, undefined + FeatureID.CanManageGroup, groupEndpointUrl, undefined, ); expect(result).not.toBeTrue(); done(); diff --git a/src/app/access-control/group-registry/group-page.guard.ts b/src/app/access-control/group-registry/group-page.guard.ts index ef49088a76..c52bed9c48 100644 --- a/src/app/access-control/group-registry/group-page.guard.ts +++ b/src/app/access-control/group-registry/group-page.guard.ts @@ -1,22 +1,31 @@ -import { CanActivateFn, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; import { inject } from '@angular/core'; -import { map } from 'rxjs/operators'; -import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; import { - StringGuardParamFn, someFeatureAuthorizationGuard + ActivatedRouteSnapshot, + CanActivateFn, + RouterStateSnapshot, +} from '@angular/router'; +import { + Observable, + of as observableOf, +} from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { + someFeatureAuthorizationGuard, + StringGuardParamFn, } from '../../core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; const defaultGroupPageGetObjectUrl: StringGuardParamFn = ( route: ActivatedRouteSnapshot, - state: RouterStateSnapshot + state: RouterStateSnapshot, ): Observable => { const halEndpointService = inject(HALEndpointService); const groupsEndpoint = 'groups'; return halEndpointService.getEndpoint(groupsEndpoint).pipe( - map(groupsUrl => `${groupsUrl}/${route?.params?.groupId}`) + map(groupsUrl => `${groupsUrl}/${route?.params?.groupId}`), ); }; diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-dashboard-routes.ts b/src/app/admin/admin-notify-dashboard/admin-notify-dashboard-routes.ts index c193148cc4..b1fd827ba8 100644 --- a/src/app/admin/admin-notify-dashboard/admin-notify-dashboard-routes.ts +++ b/src/app/admin/admin-notify-dashboard/admin-notify-dashboard-routes.ts @@ -5,14 +5,16 @@ import { import { i18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver'; import { notifyInfoGuard } from '../../core/coar-notify/notify-info/notify-info.guard'; -import { SiteAdministratorGuard } from '../../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; import { AdminNotifyDashboardComponent } from './admin-notify-dashboard.component'; import { AdminNotifyIncomingComponent } from './admin-notify-logs/admin-notify-incoming/admin-notify-incoming.component'; import { AdminNotifyOutgoingComponent } from './admin-notify-logs/admin-notify-outgoing/admin-notify-outgoing.component'; +import { + siteAdministratorGuard +} from '../../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; export const ROUTES: Route[] = [ { - canActivate: [...mapToCanActivate([SiteAdministratorGuard]), notifyInfoGuard], + canActivate: [siteAdministratorGuard, notifyInfoGuard], path: '', resolve: { breadcrumb: i18nBreadcrumbResolver, @@ -30,7 +32,7 @@ export const ROUTES: Route[] = [ breadcrumb: i18nBreadcrumbResolver, }, component: AdminNotifyIncomingComponent, - canActivate: [...mapToCanActivate([SiteAdministratorGuard]), notifyInfoGuard], + canActivate: [siteAdministratorGuard, notifyInfoGuard], data: { title: 'admin.notify.dashboard.page.title', breadcrumbKey: 'admin.notify.dashboard', @@ -42,7 +44,7 @@ export const ROUTES: Route[] = [ breadcrumb: i18nBreadcrumbResolver, }, component: AdminNotifyOutgoingComponent, - canActivate: [...mapToCanActivate([SiteAdministratorGuard]), notifyInfoGuard], + canActivate: [siteAdministratorGuard, notifyInfoGuard], data: { title: 'admin.notify.dashboard.page.title', breadcrumbKey: 'admin.notify.dashboard', diff --git a/src/app/app-routes.ts b/src/app/app-routes.ts index 8b7f6acd47..f54d01301b 100644 --- a/src/app/app-routes.ts +++ b/src/app/app-routes.ts @@ -26,12 +26,10 @@ import { COLLECTION_MODULE_PATH } from './collection-page/collection-page-routin import { COMMUNITY_MODULE_PATH } from './community-page/community-page-routing-paths'; import { authBlockingGuard } from './core/auth/auth-blocking.guard'; import { authenticatedGuard } from './core/auth/authenticated.guard'; -import { GroupAdministratorGuard } from './core/data/feature-authorization/feature-authorization-guard/group-administrator.guard'; -import { SiteAdministratorGuard } from './core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; -import { SiteRegisterGuard } from './core/data/feature-authorization/feature-authorization-guard/site-register.guard'; +import { siteRegisterGuard } from './core/data/feature-authorization/feature-authorization-guard/site-register.guard'; import { EndUserAgreementCurrentUserGuard } from './core/end-user-agreement/end-user-agreement-current-user.guard'; import { reloadGuard } from './core/reload/reload.guard'; -import { ForgotPasswordCheckGuard } from './core/rest-property/forgot-password-check-guard.guard'; +import { forgotPasswordCheckGuard } from './core/rest-property/forgot-password-check-guard.guard'; import { ServerCheckGuard } from './core/server-check/server-check.guard'; import { ThemedForbiddenComponent } from './forbidden/themed-forbidden.component'; import { ITEM_MODULE_PATH } from './item-page/item-page-routing-paths'; @@ -43,6 +41,12 @@ import { ThemedPageNotFoundComponent } from './pagenotfound/themed-pagenotfound. import { PROCESS_MODULE_PATH } from './process-page/process-page-routing.paths'; import { provideSubmissionState } from './submission/provide-submission-state'; import { SUGGESTION_MODULE_PATH } from './suggestions-page/suggestions-page-routing-paths'; +import { + siteAdministratorGuard +} from './core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; +import { + groupAdministratorGuard +} from './core/data/feature-authorization/feature-authorization-guard/group-administrator.guard'; export const APP_ROUTES: Route[] = [ { path: INTERNAL_SERVER_ERROR, component: ThemedPageInternalServerErrorComponent }, @@ -90,13 +94,13 @@ export const APP_ROUTES: Route[] = [ path: REGISTER_PATH, loadChildren: () => import('./register-page/register-page-routes') .then((m) => m.ROUTES), - canActivate: mapToCanActivate([SiteRegisterGuard]), + canActivate: [siteRegisterGuard], }, { path: FORGOT_PASSWORD_PATH, loadChildren: () => import('./forgot-password/forgot-password-routes') .then((m) => m.ROUTES), - canActivate: mapToCanActivate([EndUserAgreementCurrentUserGuard, ForgotPasswordCheckGuard]), + canActivate: [EndUserAgreementCurrentUserGuard, forgotPasswordCheckGuard], }, { path: COMMUNITY_MODULE_PATH, @@ -157,7 +161,7 @@ export const APP_ROUTES: Route[] = [ path: ADMIN_MODULE_PATH, loadChildren: () => import('./admin/admin-routes') .then((m) => m.ROUTES), - canActivate: mapToCanActivate([SiteAdministratorGuard, EndUserAgreementCurrentUserGuard]), + canActivate: [siteAdministratorGuard, EndUserAgreementCurrentUserGuard], }, { path: NOTIFICATIONS_MODULE_PATH, @@ -250,7 +254,7 @@ export const APP_ROUTES: Route[] = [ { path: ACCESS_CONTROL_MODULE_PATH, loadChildren: () => import('./access-control/access-control-routes').then((m) => m.ROUTES), - canActivate: mapToCanActivate([GroupAdministratorGuard, EndUserAgreementCurrentUserGuard]), + canActivate: [groupAdministratorGuard, EndUserAgreementCurrentUserGuard], }, { path: 'subscriptions', diff --git a/src/app/bitstream-page/bitstream-page-authorizations.guard.ts b/src/app/bitstream-page/bitstream-page-authorizations.guard.ts index 9a14f12033..134693977f 100644 --- a/src/app/bitstream-page/bitstream-page-authorizations.guard.ts +++ b/src/app/bitstream-page/bitstream-page-authorizations.guard.ts @@ -1,11 +1,9 @@ -import { inject } from '@angular/core'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; -import { BitstreamPageResolver } from './bitstream-page.resolver'; -import { Bitstream } from '../core/shared/bitstream.model'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + import { dsoPageSingleFeatureGuard } from '../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../core/data/remote-data'; +import { bitstreamPageResolver } from './bitstream-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Bitstream} pages requiring specific authorizations. @@ -13,9 +11,6 @@ import { RemoteData } from '../core/data/remote-data'; */ export const bitstreamPageAuthorizationsGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const bitstreamPageResolver = inject(BitstreamPageResolver); - return bitstreamPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanManagePolicies) + () => bitstreamPageResolver, + () => observableOf(FeatureID.CanManagePolicies), ); diff --git a/src/app/collection-page/collection-page-administrator.guard.ts b/src/app/collection-page/collection-page-administrator.guard.ts index ee48d9fb0a..30edc72fc6 100644 --- a/src/app/collection-page/collection-page-administrator.guard.ts +++ b/src/app/collection-page/collection-page-administrator.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; -import { - dsoPageSingleFeatureGuard -} from '../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../core/data/remote-data'; -import { CollectionPageResolver } from './collection-page.resolver'; -import { Collection } from '../core/shared/collection.model'; +import { collectionPageResolver } from './collection-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Collection} pages requiring administrator rights @@ -15,9 +11,6 @@ import { Collection } from '../core/shared/collection.model'; */ export const collectionPageAdministratorGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const collectionPageResolver = inject(CollectionPageResolver); - return collectionPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.AdministratorOf) + () => collectionPageResolver, + () => observableOf(FeatureID.AdministratorOf), ); diff --git a/src/app/collection-page/collection-page-routes.ts b/src/app/collection-page/collection-page-routes.ts index 889b910d6a..f2dadc3fbe 100644 --- a/src/app/collection-page/collection-page-routes.ts +++ b/src/app/collection-page/collection-page-routes.ts @@ -1,7 +1,4 @@ -import { - mapToCanActivate, - Route, -} from '@angular/router'; +import { Route } from '@angular/router'; import { browseByGuard } from '../browse-by/browse-by-guard'; import { browseByI18nBreadcrumbResolver } from '../browse-by/browse-by-i18n-breadcrumb.resolver'; @@ -15,7 +12,7 @@ import { dsoEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver'; import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model'; import { MenuItemType } from '../shared/menu/menu-item-type.model'; import { collectionPageResolver } from './collection-page.resolver'; -import { CollectionPageAdministratorGuard } from './collection-page-administrator.guard'; +import { collectionPageAdministratorGuard } from './collection-page-administrator.guard'; import { COLLECTION_CREATE_PATH, COLLECTION_EDIT_PATH, @@ -65,7 +62,7 @@ export const ROUTES: Route[] = [ path: COLLECTION_EDIT_PATH, loadChildren: () => import('./edit-collection-page/edit-collection-page-routes') .then((m) => m.ROUTES), - canActivate: mapToCanActivate([CollectionPageAdministratorGuard]), + canActivate: [collectionPageAdministratorGuard], }, { path: 'delete', diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page-routes.ts b/src/app/collection-page/edit-collection-page/edit-collection-page-routes.ts index cf550c3223..19dbaa616b 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page-routes.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page-routes.ts @@ -1,10 +1,7 @@ -import { - mapToCanActivate, - Route, -} from '@angular/router'; +import { Route } from '@angular/router'; import { i18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver'; -import { CollectionAdministratorGuard } from '../../core/data/feature-authorization/feature-authorization-guard/collection-administrator.guard'; +import { collectionAdministratorGuard } from '../../core/data/feature-authorization/feature-authorization-guard/collection-administrator.guard'; import { ResourcePolicyCreateComponent } from '../../shared/resource-policies/create/resource-policy-create.component'; import { ResourcePolicyEditComponent } from '../../shared/resource-policies/edit/resource-policy-edit.component'; import { resourcePolicyResolver } from '../../shared/resource-policies/resolvers/resource-policy.resolver'; @@ -30,7 +27,7 @@ export const ROUTES: Route[] = [ }, data: { breadcrumbKey: 'collection.edit' }, component: EditCollectionPageComponent, - canActivate: mapToCanActivate([CollectionAdministratorGuard]), + canActivate: [collectionAdministratorGuard], children: [ { path: '', diff --git a/src/app/community-page/community-page-administrator.guard.ts b/src/app/community-page/community-page-administrator.guard.ts index c41a7f0c4c..ecbc9b86c0 100644 --- a/src/app/community-page/community-page-administrator.guard.ts +++ b/src/app/community-page/community-page-administrator.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; -import { - dsoPageSingleFeatureGuard -} from '../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../core/data/remote-data'; -import { Community } from '../core/shared/community.model'; -import { CommunityPageResolver } from './community-page.resolver'; +import { communityPageResolver } from './community-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Community} pages requiring administrator rights @@ -15,9 +11,6 @@ import { CommunityPageResolver } from './community-page.resolver'; */ export const communityPageAdministratorGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const communityPageResolver = inject(CommunityPageResolver); - return communityPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.AdministratorOf) + () => communityPageResolver, + () => observableOf(FeatureID.AdministratorOf), ); diff --git a/src/app/community-page/community-page-routes.ts b/src/app/community-page/community-page-routes.ts index 656b96c311..d9505c53b1 100644 --- a/src/app/community-page/community-page-routes.ts +++ b/src/app/community-page/community-page-routes.ts @@ -1,7 +1,4 @@ -import { - mapToCanActivate, - Route, -} from '@angular/router'; +import { Route } from '@angular/router'; import { browseByGuard } from '../browse-by/browse-by-guard'; import { browseByI18nBreadcrumbResolver } from '../browse-by/browse-by-i18n-breadcrumb.resolver'; @@ -14,7 +11,7 @@ import { dsoEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver'; import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model'; import { MenuItemType } from '../shared/menu/menu-item-type.model'; import { communityPageResolver } from './community-page.resolver'; -import { CommunityPageAdministratorGuard } from './community-page-administrator.guard'; +import { communityPageAdministratorGuard } from './community-page-administrator.guard'; import { COMMUNITY_CREATE_PATH, COMMUNITY_EDIT_PATH, @@ -62,7 +59,7 @@ export const ROUTES: Route[] = [ path: COMMUNITY_EDIT_PATH, loadChildren: () => import('./edit-community-page/edit-community-page-routes') .then((m) => m.ROUTES), - canActivate: mapToCanActivate([CommunityPageAdministratorGuard]), + canActivate: [communityPageAdministratorGuard], }, { path: 'delete', diff --git a/src/app/community-page/edit-community-page/edit-community-page-routes.ts b/src/app/community-page/edit-community-page/edit-community-page-routes.ts index a15312a216..2402c2037d 100644 --- a/src/app/community-page/edit-community-page/edit-community-page-routes.ts +++ b/src/app/community-page/edit-community-page/edit-community-page-routes.ts @@ -1,10 +1,7 @@ -import { - mapToCanActivate, - Route, -} from '@angular/router'; +import { Route } from '@angular/router'; import { i18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver'; -import { CommunityAdministratorGuard } from '../../core/data/feature-authorization/feature-authorization-guard/community-administrator.guard'; +import { communityAdministratorGuard } from '../../core/data/feature-authorization/feature-authorization-guard/community-administrator.guard'; import { ResourcePolicyCreateComponent } from '../../shared/resource-policies/create/resource-policy-create.component'; import { ResourcePolicyEditComponent } from '../../shared/resource-policies/edit/resource-policy-edit.component'; import { resourcePolicyResolver } from '../../shared/resource-policies/resolvers/resource-policy.resolver'; @@ -28,7 +25,7 @@ export const ROUTES: Route[] = [ }, data: { breadcrumbKey: 'community.edit' }, component: EditCommunityPageComponent, - canActivate: mapToCanActivate([CommunityAdministratorGuard]), + canActivate: [communityAdministratorGuard], children: [ { path: '', diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/collection-administrator.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/collection-administrator.guard.ts index 4eb5ca1566..1b1b4a9d6c 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/collection-administrator.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/collection-administrator.guard.ts @@ -1,7 +1,8 @@ import { CanActivateFn } from '@angular/router'; -import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; import { of as observableOf } from 'rxjs'; + import { FeatureID } from '../feature-id'; +import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; /** * Prevent unauthorized activating and loading of routes when the current authenticated user diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/community-administrator.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/community-administrator.guard.ts index 4b3630db23..6d7dac314e 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/community-administrator.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/community-administrator.guard.ts @@ -1,7 +1,8 @@ import { CanActivateFn } from '@angular/router'; -import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; import { of as observableOf } from 'rxjs'; + import { FeatureID } from '../feature-id'; +import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; /** * Prevent unauthorized activating and loading of routes when the current authenticated user diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts index dac5af9c48..18292bb943 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts @@ -1,21 +1,32 @@ -import { AuthorizationDataService } from '../authorization-data.service'; -import { Router, UrlTree, ResolveFn } from '@angular/router'; -import { RemoteData } from '../../remote-data'; -import { Observable, of as observableOf } from 'rxjs'; -import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; -import { DSpaceObject } from '../../../shared/dspace-object.model'; -import { AuthService } from '../../../auth/auth.service'; import { TestBed } from '@angular/core/testing'; -import { dsoPageSingleFeatureGuard } from './dso-page-single-feature.guard'; +import { + ResolveFn, + Router, + UrlTree, +} from '@angular/router'; +import { + Observable, + of as observableOf, +} from 'rxjs'; + +import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; +import { AuthService } from '../../../auth/auth.service'; +import { DSpaceObject } from '../../../shared/dspace-object.model'; +import { RemoteData } from '../../remote-data'; +import { AuthorizationDataService } from '../authorization-data.service'; import { FeatureID } from '../feature-id'; -import { defaultDSOGetObjectUrl, getRouteWithDSOId } from './dso-page-some-feature.guard'; +import { dsoPageSingleFeatureGuard } from './dso-page-single-feature.guard'; +import { + defaultDSOGetObjectUrl, + getRouteWithDSOId, +} from './dso-page-some-feature.guard'; describe('DsoPageSingleFeatureGuard', () => { let authorizationService: AuthorizationDataService; let router: Router; let authService: AuthService; - let resolver: ResolveFn>>; + let resolver: ResolveFn>; let object: DSpaceObject; let route; let parentRoute; @@ -24,28 +35,28 @@ describe('DsoPageSingleFeatureGuard', () => { function init() { object = { - self: 'test-selflink' + self: 'test-selflink', } as DSpaceObject; authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) + isAuthorized: observableOf(true), }); router = jasmine.createSpyObj('router', { - parseUrl: {} + parseUrl: {}, }); resolver = () => createSuccessfulRemoteDataObject$(object); authService = jasmine.createSpyObj('authService', { - isAuthenticated: observableOf(true) + isAuthenticated: observableOf(true), }); parentRoute = { params: { - id: '3e1a5327-dabb-41ff-af93-e6cab9d032f0' - } + id: '3e1a5327-dabb-41ff-af93-e6cab9d032f0', + }, }; route = { params: { }, - parent: parentRoute + parent: parentRoute, }; featureId = FeatureID.LoginOnBehalfOf; @@ -55,7 +66,7 @@ describe('DsoPageSingleFeatureGuard', () => { { provide: AuthorizationDataService, useValue: authorizationService }, { provide: Router, useValue: router }, { provide: AuthService, useValue: authService }, - ] + ], }); } @@ -83,7 +94,7 @@ describe('DsoPageSingleFeatureGuard', () => { it('should call authorizationService.isAuthenticated with the appropriate arguments', (done) => { const result$ = TestBed.runInInjectionContext(() => { return dsoPageSingleFeatureGuard( - () => resolver, () => observableOf(featureId) + () => resolver, () => observableOf(featureId), )(route, { url: 'current-url' } as any); }) as Observable; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts index 0055d983d3..5073a38653 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts @@ -1,21 +1,27 @@ -import { CanActivateFn, ActivatedRouteSnapshot, RouterStateSnapshot, ResolveFn } from '@angular/router'; -import { SingleFeatureGuardParamFn } from './single-feature-authorization.guard'; -import { dsoPageSomeFeatureGuard } from './dso-page-some-feature.guard'; +import { + ActivatedRouteSnapshot, + CanActivateFn, + ResolveFn, + RouterStateSnapshot, +} from '@angular/router'; import { Observable } from 'rxjs'; -import { FeatureID } from '../feature-id'; import { map } from 'rxjs/operators'; + import { DSpaceObject } from '../../../shared/dspace-object.model'; import { RemoteData } from '../../remote-data'; +import { FeatureID } from '../feature-id'; +import { dsoPageSomeFeatureGuard } from './dso-page-some-feature.guard'; +import { SingleFeatureGuardParamFn } from './single-feature-authorization.guard'; /** * Abstract Guard for preventing unauthorized access to {@link DSpaceObject} pages that require rights for a specific feature * This guard utilizes a resolver to retrieve the relevant object to check authorizations for */ export const dsoPageSingleFeatureGuard = ( - getResolveFn: () => ResolveFn>>, - getFeatureID: SingleFeatureGuardParamFn + getResolveFn: () => ResolveFn>, + getFeatureID: SingleFeatureGuardParamFn, ): CanActivateFn => dsoPageSomeFeatureGuard( - getResolveFn, - (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable => getFeatureID(route, state).pipe( - map((featureID: FeatureID) => [featureID]), -)); + getResolveFn, + (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable => getFeatureID(route, state).pipe( + map((featureID: FeatureID) => [featureID]), + )); diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts index ef500598a0..08f1c96b29 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts @@ -1,24 +1,32 @@ -import { AuthorizationDataService } from '../authorization-data.service'; -import { Router, UrlTree, ResolveFn } from '@angular/router'; -import { RemoteData } from '../../remote-data'; -import { Observable, of as observableOf } from 'rxjs'; -import { DSpaceObject } from '../../../shared/dspace-object.model'; -import { AuthService } from '../../../auth/auth.service'; -import { - dsoPageSomeFeatureGuard, - defaultDSOGetObjectUrl, - getRouteWithDSOId -} from './dso-page-some-feature.guard'; import { TestBed } from '@angular/core/testing'; -import { FeatureID } from '../feature-id'; +import { + ResolveFn, + Router, + UrlTree, +} from '@angular/router'; +import { + Observable, + of as observableOf, +} from 'rxjs'; + import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; +import { AuthService } from '../../../auth/auth.service'; +import { DSpaceObject } from '../../../shared/dspace-object.model'; +import { RemoteData } from '../../remote-data'; +import { AuthorizationDataService } from '../authorization-data.service'; +import { FeatureID } from '../feature-id'; +import { + defaultDSOGetObjectUrl, + dsoPageSomeFeatureGuard, + getRouteWithDSOId, +} from './dso-page-some-feature.guard'; describe('dsoPageSomeFeatureGuard and its functions', () => { let authorizationService: AuthorizationDataService; let router: Router; let authService: AuthService; - let resolver: ResolveFn>>; + let resolver: ResolveFn>; let object: DSpaceObject; let route; let parentRoute; @@ -27,28 +35,28 @@ describe('dsoPageSomeFeatureGuard and its functions', () => { function init() { object = { - self: 'test-selflink' + self: 'test-selflink', } as DSpaceObject; featureIds = [FeatureID.LoginOnBehalfOf, FeatureID.CanDelete]; authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) + isAuthorized: observableOf(true), }); router = jasmine.createSpyObj('router', { - parseUrl: {} + parseUrl: {}, }); resolver = () => createSuccessfulRemoteDataObject$(object); authService = jasmine.createSpyObj('authService', { - isAuthenticated: observableOf(true) + isAuthenticated: observableOf(true), }); parentRoute = { params: { - id: '3e1a5327-dabb-41ff-af93-e6cab9d032f0' - } + id: '3e1a5327-dabb-41ff-af93-e6cab9d032f0', + }, }; route = { params: { }, - parent: parentRoute + parent: parentRoute, }; TestBed.configureTestingModule({ @@ -56,7 +64,7 @@ describe('dsoPageSomeFeatureGuard and its functions', () => { { provide: AuthorizationDataService, useValue: authorizationService }, { provide: Router, useValue: router }, { provide: AuthService, useValue: authService }, - ] + ], }); } @@ -87,7 +95,7 @@ describe('dsoPageSomeFeatureGuard and its functions', () => { it('should call authorizationService.isAuthenticated with the appropriate arguments', (done) => { const result$ = TestBed.runInInjectionContext(() => { return dsoPageSomeFeatureGuard( - () => resolver, () => observableOf(featureIds) + () => resolver, () => observableOf(featureIds), )(route, { url: 'current-url' } as any); }) as Observable; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts index e920687ecf..7469f113b4 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts @@ -1,18 +1,27 @@ -import { DSpaceObject } from '../../../shared/dspace-object.model'; -import { ResolveFn, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateFn } from '@angular/router'; -import { Observable } from 'rxjs'; -import { RemoteData } from '../../remote-data'; -import { hasValue, hasNoValue } from '../../../../shared/empty.util'; -import { getAllSucceededRemoteDataPayload } from '../../../shared/operators'; -import { map } from 'rxjs/operators'; import { - StringGuardParamFn, - SomeFeatureGuardParamFn, - someFeatureAuthorizationGuard -} from './some-feature-authorization.guard'; -import { FeatureID } from '../feature-id'; + ActivatedRouteSnapshot, + CanActivateFn, + ResolveFn, + RouterStateSnapshot, +} from '@angular/router'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; -export declare type DSOGetObjectURlFn = (resolve: ResolveFn>>) => StringGuardParamFn; +import { + hasNoValue, + hasValue, +} from '../../../../shared/empty.util'; +import { DSpaceObject } from '../../../shared/dspace-object.model'; +import { getAllSucceededRemoteDataPayload } from '../../../shared/operators'; +import { RemoteData } from '../../remote-data'; +import { FeatureID } from '../feature-id'; +import { + someFeatureAuthorizationGuard, + SomeFeatureGuardParamFn, + StringGuardParamFn, +} from './some-feature-authorization.guard'; + +export declare type DSOGetObjectURlFn = (resolve: ResolveFn>) => StringGuardParamFn; /** @@ -29,12 +38,12 @@ export const getRouteWithDSOId = (route: ActivatedRouteSnapshot): ActivatedRoute -export const defaultDSOGetObjectUrl: DSOGetObjectURlFn = (resolve: ResolveFn>>): StringGuardParamFn => { +export const defaultDSOGetObjectUrl: DSOGetObjectURlFn = (resolve: ResolveFn>): StringGuardParamFn => { return (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable => { const routeWithObjectID = getRouteWithDSOId(route); return (resolve(routeWithObjectID, state) as Observable>).pipe( getAllSucceededRemoteDataPayload(), - map((dso) => dso.self) + map((dso) => dso.self), ); }; }; @@ -44,7 +53,7 @@ export const defaultDSOGetObjectUrl: DSOGetObjectURlFn = ( - getResolveFn: () => ResolveFn>>, + getResolveFn: () => ResolveFn>, getFeatureIDs: SomeFeatureGuardParamFn, getObjectUrl: DSOGetObjectURlFn = defaultDSOGetObjectUrl, getEPersonUuid?: StringGuardParamFn, diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/group-administrator.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/group-administrator.guard.ts index 6d4e02dbcf..9641d0aace 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/group-administrator.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/group-administrator.guard.ts @@ -1,7 +1,8 @@ import { CanActivateFn } from '@angular/router'; -import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; import { of as observableOf } from 'rxjs'; + import { FeatureID } from '../feature-id'; +import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; /** * Prevent unauthorized activating and loading of routes when the current authenticated user doesn't have group diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts index dc518ddaff..7c15fa4cdf 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts @@ -1,10 +1,20 @@ +import { + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + Router, + UrlTree, +} from '@angular/router'; +import { + Observable, + of as observableOf, +} from 'rxjs'; + +import { AuthService } from '../../../auth/auth.service'; import { AuthorizationDataService } from '../authorization-data.service'; import { FeatureID } from '../feature-id'; -import { of as observableOf, Observable } from 'rxjs'; -import { Router, UrlTree } from '@angular/router'; -import { AuthService } from '../../../auth/auth.service'; import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; -import { waitForAsync, TestBed } from '@angular/core/testing'; describe('singleFeatureAuthorizationGuard', () => { let authorizationService: AuthorizationDataService; @@ -35,7 +45,7 @@ describe('singleFeatureAuthorizationGuard', () => { { provide: AuthorizationDataService, useValue: authorizationService }, { provide: Router, useValue: router }, { provide: AuthService, useValue: authService }, - ] + ], }); } diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts index 4b37f1d0ba..995dcb6f5c 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts @@ -1,8 +1,16 @@ -import { ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateFn } from '@angular/router'; +import { + ActivatedRouteSnapshot, + CanActivateFn, + RouterStateSnapshot, +} from '@angular/router'; import { Observable } from 'rxjs'; -import { FeatureID } from '../feature-id'; import { map } from 'rxjs/operators'; -import { StringGuardParamFn, someFeatureAuthorizationGuard } from './some-feature-authorization.guard'; + +import { FeatureID } from '../feature-id'; +import { + someFeatureAuthorizationGuard, + StringGuardParamFn, +} from './some-feature-authorization.guard'; export declare type SingleFeatureGuardParamFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => Observable; @@ -23,5 +31,5 @@ export const singleFeatureAuthorizationGuard = ( getEPersonUuid?: StringGuardParamFn, ): CanActivateFn => someFeatureAuthorizationGuard( (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable => getFeatureID(route, state).pipe( - map((featureID: FeatureID) => [featureID]), -), getObjectUrl, getEPersonUuid); + map((featureID: FeatureID) => [featureID]), + ), getObjectUrl, getEPersonUuid); diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/site-administrator.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/site-administrator.guard.ts index bcef5b7c8f..4caa1f806d 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/site-administrator.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/site-administrator.guard.ts @@ -1,7 +1,8 @@ import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + import { FeatureID } from '../feature-id'; import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; -import { of as observableOf } from 'rxjs'; /** * Prevent unauthorized activating and loading of routes when the current authenticated user doesn't have administrator diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/site-register.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/site-register.guard.ts index bf1945ac33..ee08532d38 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/site-register.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/site-register.guard.ts @@ -1,7 +1,8 @@ import { CanActivateFn } from '@angular/router'; -import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; import { of as observableOf } from 'rxjs'; + import { FeatureID } from '../feature-id'; +import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; /** * Prevent unauthorized activating and loading of routes when the current authenticated user doesn't have registration diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts index c12668d6a5..79e023bdd0 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts @@ -1,10 +1,20 @@ +import { + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + Router, + UrlTree, +} from '@angular/router'; +import { + Observable, + of as observableOf, +} from 'rxjs'; + +import { AuthService } from '../../../auth/auth.service'; import { AuthorizationDataService } from '../authorization-data.service'; import { FeatureID } from '../feature-id'; -import { Observable, of as observableOf } from 'rxjs'; -import { Router, UrlTree } from '@angular/router'; -import { AuthService } from '../../../auth/auth.service'; import { someFeatureAuthorizationGuard } from './some-feature-authorization.guard'; -import { TestBed, waitForAsync } from '@angular/core/testing'; describe('SomeFeatureAuthorizationGuard', () => { let authorizationService: AuthorizationDataService; @@ -25,15 +35,15 @@ describe('SomeFeatureAuthorizationGuard', () => { authorizationService = Object.assign({ isAuthorized(featureId?: FeatureID): Observable { return observableOf(authorizedFeatureIds.indexOf(featureId) > -1); - } + }, }); router = jasmine.createSpyObj('router', { - parseUrl: {} + parseUrl: {}, }); authService = jasmine.createSpyObj('authService', { - isAuthenticated: observableOf(true) + isAuthenticated: observableOf(true), }); TestBed.configureTestingModule({ @@ -41,7 +51,7 @@ describe('SomeFeatureAuthorizationGuard', () => { { provide: AuthorizationDataService, useValue: authorizationService }, { provide: Router, useValue: router }, { provide: AuthService, useValue: authService }, - ] + ], }); } diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts index f587961268..53e5e582eb 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts @@ -1,11 +1,22 @@ -import { ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateFn, Router, UrlTree } from '@angular/router'; -import { Observable, of as observableOf, combineLatest as observableCombineLatest } from 'rxjs'; -import { FeatureID } from '../feature-id'; -import { AuthorizationDataService } from '../authorization-data.service'; -import { AuthService } from '../../../auth/auth.service'; import { inject } from '@angular/core'; +import { + ActivatedRouteSnapshot, + CanActivateFn, + Router, + RouterStateSnapshot, + UrlTree, +} from '@angular/router'; +import { + combineLatest as observableCombineLatest, + Observable, + of as observableOf, +} from 'rxjs'; import { switchMap } from 'rxjs/operators'; + +import { AuthService } from '../../../auth/auth.service'; import { returnForbiddenUrlTreeOrLoginOnAllFalse } from '../../../shared/authorized.operators'; +import { AuthorizationDataService } from '../authorization-data.service'; +import { FeatureID } from '../feature-id'; export declare type SomeFeatureGuardParamFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => Observable; export declare type StringGuardParamFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => Observable; @@ -33,7 +44,7 @@ export const someFeatureAuthorizationGuard = ( return observableCombineLatest([ getFeatureIDs(route, state), getObjectUrl(route, state), - getEPersonUuid(route, state) + getEPersonUuid(route, state), ]).pipe( switchMap(([featureIDs, objectUrl, ePersonUuid]: [FeatureID[], string, string]) => observableCombineLatest(featureIDs.map((featureID) => authorizationService.isAuthorized(featureID, objectUrl, ePersonUuid))), diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard.ts b/src/app/core/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard.ts index ff58dbb4be..21cafeaba3 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard.ts +++ b/src/app/core/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard.ts @@ -1,7 +1,8 @@ import { CanActivateFn } from '@angular/router'; -import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; import { of as observableOf } from 'rxjs'; + import { FeatureID } from '../feature-id'; +import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; /** * Prevent unauthorized activating and loading of routes when the current authenticated user doesn't have group diff --git a/src/app/core/rest-property/forgot-password-check-guard.guard.ts b/src/app/core/rest-property/forgot-password-check-guard.guard.ts index cc74e8039f..49727dda11 100644 --- a/src/app/core/rest-property/forgot-password-check-guard.guard.ts +++ b/src/app/core/rest-property/forgot-password-check-guard.guard.ts @@ -1,37 +1,11 @@ -import { Injectable } from '@angular/core'; -import { - ActivatedRouteSnapshot, - Router, - RouterStateSnapshot, -} from '@angular/router'; -import { - Observable, - of, -} from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; -import { AuthService } from '../auth/auth.service'; -import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; -import { SingleFeatureAuthorizationGuard } from '../data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard'; +import { singleFeatureAuthorizationGuard } from '../data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard'; import { FeatureID } from '../data/feature-authorization/feature-id'; -@Injectable({ - providedIn: 'root', -}) /** * Guard that checks if the forgot-password feature is enabled */ -export class ForgotPasswordCheckGuard extends SingleFeatureAuthorizationGuard { - - constructor( - protected readonly authorizationService: AuthorizationDataService, - protected readonly router: Router, - protected readonly authService: AuthService, - ) { - super(authorizationService, router, authService); - } - - getFeatureID(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { - return of(FeatureID.EPersonForgotPassword); - } - -} +export const forgotPasswordCheckGuard: CanActivateFn = + singleFeatureAuthorizationGuard(() => observableOf(FeatureID.EPersonForgotPassword)); diff --git a/src/app/health-page/health-page-routes.ts b/src/app/health-page/health-page-routes.ts index 4c02bc548f..f87cf8e3d3 100644 --- a/src/app/health-page/health-page-routes.ts +++ b/src/app/health-page/health-page-routes.ts @@ -1,10 +1,7 @@ -import { - mapToCanActivate, - Route, -} from '@angular/router'; +import { Route } from '@angular/router'; import { i18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; -import { SiteAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; +import { siteAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; import { HealthPageComponent } from './health-page.component'; export const ROUTES: Route[] = [ @@ -15,7 +12,7 @@ export const ROUTES: Route[] = [ breadcrumbKey: 'health', title: 'health-page.title', }, - canActivate: mapToCanActivate([SiteAdministratorGuard]), + canActivate: [siteAdministratorGuard], component: HealthPageComponent, }, ]; diff --git a/src/app/item-page/edit-item-page/edit-item-page-routes.ts b/src/app/item-page/edit-item-page/edit-item-page-routes.ts index 1b1e43a883..a1d76ded96 100644 --- a/src/app/item-page/edit-item-page/edit-item-page-routes.ts +++ b/src/app/item-page/edit-item-page/edit-item-page-routes.ts @@ -1,7 +1,4 @@ -import { - mapToCanActivate, - Route, -} from '@angular/router'; +import { Route } from '@angular/router'; import { i18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver'; import { ThemedDsoEditMetadataComponent } from '../../dso-shared/dso-edit-metadata/themed-dso-edit-metadata.component'; @@ -27,17 +24,17 @@ import { ItemCollectionMapperComponent } from './item-collection-mapper/item-col import { ItemCurateComponent } from './item-curate/item-curate.component'; import { ItemDeleteComponent } from './item-delete/item-delete.component'; import { ItemMoveComponent } from './item-move/item-move.component'; -import { ItemPageAccessControlGuard } from './item-page-access-control.guard'; -import { ItemPageBitstreamsGuard } from './item-page-bitstreams.guard'; -import { ItemPageCollectionMapperGuard } from './item-page-collection-mapper.guard'; -import { ItemPageCurateGuard } from './item-page-curate.guard'; -import { ItemPageMetadataGuard } from './item-page-metadata.guard'; -import { ItemPageRegisterDoiGuard } from './item-page-register-doi.guard'; -import { ItemPageReinstateGuard } from './item-page-reinstate.guard'; -import { ItemPageRelationshipsGuard } from './item-page-relationships.guard'; -import { ItemPageStatusGuard } from './item-page-status.guard'; -import { ItemPageVersionHistoryGuard } from './item-page-version-history.guard'; -import { ItemPageWithdrawGuard } from './item-page-withdraw.guard'; +import { itemPageAccessControlGuard } from './item-page-access-control.guard'; +import { itemPageBitstreamsGuard } from './item-page-bitstreams.guard'; +import { itemPageCollectionMapperGuard } from './item-page-collection-mapper.guard'; +import { itemPageCurateGuard } from './item-page-curate.guard'; +import { itemPageMetadataGuard } from './item-page-metadata.guard'; +import { itemPageRegisterDoiGuard } from './item-page-register-doi.guard'; +import { itemPageReinstateGuard } from './item-page-reinstate.guard'; +import { itemPageRelationshipsGuard } from './item-page-relationships.guard'; +import { itemPageStatusGuard } from './item-page-status.guard'; +import { itemPageVersionHistoryGuard } from './item-page-version-history.guard'; +import { itemPageWithdrawGuard } from './item-page-withdraw.guard'; import { ItemPrivateComponent } from './item-private/item-private.component'; import { ItemPublicComponent } from './item-public/item-public.component'; import { ItemRegisterDoiComponent } from './item-register-doi/item-register-doi.component'; @@ -72,31 +69,31 @@ export const ROUTES: Route[] = [ path: 'status', component: ThemedItemStatusComponent, data: { title: 'item.edit.tabs.status.title', showBreadcrumbs: true }, - canActivate: mapToCanActivate([ItemPageStatusGuard]), + canActivate: [itemPageStatusGuard], }, { path: 'bitstreams', component: ItemBitstreamsComponent, data: { title: 'item.edit.tabs.bitstreams.title', showBreadcrumbs: true }, - canActivate: mapToCanActivate([ItemPageBitstreamsGuard]), + canActivate: [itemPageBitstreamsGuard], }, { path: 'metadata', component: ThemedDsoEditMetadataComponent, data: { title: 'item.edit.tabs.metadata.title', showBreadcrumbs: true }, - canActivate: mapToCanActivate([ItemPageMetadataGuard]), + canActivate: [itemPageMetadataGuard], }, { path: 'curate', component: ItemCurateComponent, data: { title: 'item.edit.tabs.curate.title', showBreadcrumbs: true }, - canActivate: mapToCanActivate([ItemPageCurateGuard]), + canActivate: [itemPageCurateGuard], }, { path: 'relationships', component: ItemRelationshipsComponent, data: { title: 'item.edit.tabs.relationships.title', showBreadcrumbs: true }, - canActivate: mapToCanActivate([ItemPageRelationshipsGuard]), + canActivate: [itemPageRelationshipsGuard], }, /* TODO - uncomment & fix when view page exists { @@ -114,19 +111,19 @@ export const ROUTES: Route[] = [ path: 'versionhistory', component: ItemVersionHistoryComponent, data: { title: 'item.edit.tabs.versionhistory.title', showBreadcrumbs: true }, - canActivate: mapToCanActivate([ItemPageVersionHistoryGuard]), + canActivate: [itemPageVersionHistoryGuard], }, { path: 'access-control', component: ItemAccessControlComponent, data: { title: 'item.edit.tabs.access-control.title', showBreadcrumbs: true }, - canActivate: mapToCanActivate([ItemPageAccessControlGuard]), + canActivate: [itemPageAccessControlGuard], }, { path: 'mapper', component: ItemCollectionMapperComponent, data: { title: 'item.edit.tabs.item-mapper.title', showBreadcrumbs: true }, - canActivate: mapToCanActivate([ItemPageCollectionMapperGuard]), + canActivate: [itemPageCollectionMapperGuard], }, ], }, @@ -137,12 +134,12 @@ export const ROUTES: Route[] = [ { path: ITEM_EDIT_WITHDRAW_PATH, component: ItemWithdrawComponent, - canActivate: mapToCanActivate([ItemPageWithdrawGuard]), + canActivate: [itemPageWithdrawGuard], }, { path: ITEM_EDIT_REINSTATE_PATH, component: ItemReinstateComponent, - canActivate: mapToCanActivate([ItemPageReinstateGuard]), + canActivate: [itemPageReinstateGuard], }, { path: ITEM_EDIT_PRIVATE_PATH, @@ -164,7 +161,7 @@ export const ROUTES: Route[] = [ { path: ITEM_EDIT_REGISTER_DOI_PATH, component: ItemRegisterDoiComponent, - canActivate: mapToCanActivate([ItemPageRegisterDoiGuard]), + canActivate: [itemPageRegisterDoiGuard], data: { title: 'item.edit.register-doi.title' }, }, { 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 42ee1f3d15..bcf5ea9a13 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 @@ -1,43 +1,15 @@ -import { Injectable } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - Router, - RouterStateSnapshot, -} from '@angular/router'; -import { - Observable, - of as observableOf, -} from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; -import { AuthService } from '../../core/auth/auth.service'; -import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; -import { DsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; -import { Item } from '../../core/shared/item.model'; import { itemPageResolver } from '../item-page.resolver'; -@Injectable({ - providedIn: 'root', -}) /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring administrator rights */ -export class ItemPageAccessControlGuard extends DsoPageSingleFeatureGuard { - - protected resolver: ResolveFn> = itemPageResolver; - - constructor(protected authorizationService: AuthorizationDataService, - protected router: Router, - protected authService: AuthService) { - super(authorizationService, router, authService); - } - - /** - * Check administrator authorization rights - */ - getFeatureID(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { - return observableOf(FeatureID.AdministratorOf); - } -} +export const itemPageAccessControlGuard: CanActivateFn = + dsoPageSingleFeatureGuard( + () => itemPageResolver, + () => observableOf(FeatureID.AdministratorOf), + ); diff --git a/src/app/item-page/edit-item-page/item-page-bitstreams.guard.ts b/src/app/item-page/edit-item-page/item-page-bitstreams.guard.ts index 9b72e9c6e3..32af7e603e 100644 --- a/src/app/item-page/edit-item-page/item-page-bitstreams.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-bitstreams.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring manage bitstreams rights @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageBitstreamsGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanManageBitstreamBundles) + () => itemPageResolver, + () => observableOf(FeatureID.CanManageBitstreamBundles), ); diff --git a/src/app/item-page/edit-item-page/item-page-collection-mapper.guard.ts b/src/app/item-page/edit-item-page/item-page-collection-mapper.guard.ts index 98045173f2..56d9675d92 100644 --- a/src/app/item-page/edit-item-page/item-page-collection-mapper.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-collection-mapper.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring manage mappings rights @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageCollectionMapperGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanManageMappings) + () => itemPageResolver, + () => observableOf(FeatureID.CanManageMappings), ); 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 392bc5c523..40cfe00c2f 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 @@ -1,43 +1,15 @@ -import { Injectable } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - Router, - RouterStateSnapshot, -} from '@angular/router'; -import { - Observable, - of as observableOf, -} from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; -import { AuthService } from '../../core/auth/auth.service'; -import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; -import { DsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; -import { Item } from '../../core/shared/item.model'; import { itemPageResolver } from '../item-page.resolver'; -@Injectable({ - providedIn: 'root', -}) /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring administrator rights */ -export class ItemPageCurateGuard extends DsoPageSingleFeatureGuard { - - protected resolver: ResolveFn> = itemPageResolver; - - constructor(protected authorizationService: AuthorizationDataService, - protected router: Router, - protected authService: AuthService) { - super(authorizationService, router, authService); - } - - /** - * Check administrator authorization rights - */ - getFeatureID(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { - return observableOf(FeatureID.AdministratorOf); - } -} +export const itemPageCurateGuard: CanActivateFn = + dsoPageSingleFeatureGuard( + () => itemPageResolver, + () => observableOf(FeatureID.AdministratorOf), + ); diff --git a/src/app/item-page/edit-item-page/item-page-delete.guard.ts b/src/app/item-page/edit-item-page/item-page-delete.guard.ts index 37cb4d781d..99d79ca68f 100644 --- a/src/app/item-page/edit-item-page/item-page-delete.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-delete.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring specific authorizations. @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageDeleteGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanDelete) + () => itemPageResolver, + () => observableOf(FeatureID.CanDelete), ); diff --git a/src/app/item-page/edit-item-page/item-page-edit-authorizations.guard.ts b/src/app/item-page/edit-item-page/item-page-edit-authorizations.guard.ts index 042967dbfb..c5032ac604 100644 --- a/src/app/item-page/edit-item-page/item-page-edit-authorizations.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-edit-authorizations.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring specific authorizations. @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageEditAuthorizationsGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanManagePolicies) + () => itemPageResolver, + () => observableOf(FeatureID.CanManagePolicies), ); diff --git a/src/app/item-page/edit-item-page/item-page-metadata.guard.ts b/src/app/item-page/edit-item-page/item-page-metadata.guard.ts index 00f64233be..f058eb7359 100644 --- a/src/app/item-page/edit-item-page/item-page-metadata.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-metadata.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring edit metadata rights @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageMetadataGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanEditMetadata) + () => itemPageResolver, + () => observableOf(FeatureID.CanEditMetadata), ); diff --git a/src/app/item-page/edit-item-page/item-page-move.guard.ts b/src/app/item-page/edit-item-page/item-page-move.guard.ts index 06c71738b7..307201ef90 100644 --- a/src/app/item-page/edit-item-page/item-page-move.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-move.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring specific authorizations. @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageMoveGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanMove) + () => itemPageResolver, + () => observableOf(FeatureID.CanMove), ); diff --git a/src/app/item-page/edit-item-page/item-page-private.guard.ts b/src/app/item-page/edit-item-page/item-page-private.guard.ts index eacfa1f874..64626542ff 100644 --- a/src/app/item-page/edit-item-page/item-page-private.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-private.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring specific authorizations. @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPagePrivateGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanMakePrivate) + () => itemPageResolver, + () => observableOf(FeatureID.CanMakePrivate), ); diff --git a/src/app/item-page/edit-item-page/item-page-register-doi.guard.ts b/src/app/item-page/edit-item-page/item-page-register-doi.guard.ts index 0758eede08..9bedca518b 100644 --- a/src/app/item-page/edit-item-page/item-page-register-doi.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-register-doi.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring DOI registration rights @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageRegisterDoiGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanRegisterDOI) + () => itemPageResolver, + () => observableOf(FeatureID.CanRegisterDOI), ); diff --git a/src/app/item-page/edit-item-page/item-page-reinstate.guard.ts b/src/app/item-page/edit-item-page/item-page-reinstate.guard.ts index e0d19a3cef..3e60158d0a 100644 --- a/src/app/item-page/edit-item-page/item-page-reinstate.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-reinstate.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring reinstate rights @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageReinstateGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.ReinstateItem) + () => itemPageResolver, + () => observableOf(FeatureID.ReinstateItem), ); diff --git a/src/app/item-page/edit-item-page/item-page-relationships.guard.ts b/src/app/item-page/edit-item-page/item-page-relationships.guard.ts index dfb5bc4b7b..fe107977db 100644 --- a/src/app/item-page/edit-item-page/item-page-relationships.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-relationships.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring manage relationships rights @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageRelationshipsGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanManageRelationships) + () => itemPageResolver, + () => observableOf(FeatureID.CanManageRelationships), ); diff --git a/src/app/item-page/edit-item-page/item-page-status.guard.ts b/src/app/item-page/edit-item-page/item-page-status.guard.ts index c2be1a72e7..deeb2dbb5e 100644 --- a/src/app/item-page/edit-item-page/item-page-status.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-status.guard.ts @@ -1,13 +1,9 @@ -import { - dsoPageSomeFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { inject } from '@angular/core'; -import { ItemPageResolver } from '../item-page.resolver'; -import { Observable, of as observableOf } from 'rxjs'; -import { RemoteData } from '../../core/data/remote-data'; -import { Item } from '../../core/shared/item.model'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSomeFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring any of the rights required for @@ -16,9 +12,6 @@ import { FeatureID } from '../../core/data/feature-authorization/feature-id'; */ export const itemPageStatusGuard: CanActivateFn = dsoPageSomeFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf([FeatureID.CanManageMappings, FeatureID.WithdrawItem, FeatureID.ReinstateItem, FeatureID.CanManagePolicies, FeatureID.CanMakePrivate, FeatureID.CanDelete, FeatureID.CanMove, FeatureID.CanRegisterDOI]) + () => itemPageResolver, + () => observableOf([FeatureID.CanManageMappings, FeatureID.WithdrawItem, FeatureID.ReinstateItem, FeatureID.CanManagePolicies, FeatureID.CanMakePrivate, FeatureID.CanDelete, FeatureID.CanMove, FeatureID.CanRegisterDOI]), ); diff --git a/src/app/item-page/edit-item-page/item-page-version-history.guard.ts b/src/app/item-page/edit-item-page/item-page-version-history.guard.ts index ecd19072d0..99d581dce6 100644 --- a/src/app/item-page/edit-item-page/item-page-version-history.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-version-history.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring manage versions rights @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageVersionHistoryGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanManageVersions) + () => itemPageResolver, + () => observableOf(FeatureID.CanManageVersions), ); diff --git a/src/app/item-page/edit-item-page/item-page-withdraw.guard.ts b/src/app/item-page/edit-item-page/item-page-withdraw.guard.ts index 38148973a7..8e41b1c653 100644 --- a/src/app/item-page/edit-item-page/item-page-withdraw.guard.ts +++ b/src/app/item-page/edit-item-page/item-page-withdraw.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring withdraw rights @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const itemPageWithdrawGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.WithdrawItem) + () => itemPageResolver, + () => observableOf(FeatureID.WithdrawItem), ); diff --git a/src/app/item-page/item-page-administrator.guard.ts b/src/app/item-page/item-page-administrator.guard.ts index 359e7f1849..411ffa1e37 100644 --- a/src/app/item-page/item-page-administrator.guard.ts +++ b/src/app/item-page/item-page-administrator.guard.ts @@ -1,22 +1,15 @@ -import { inject } from '@angular/core'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; -import { ItemPageResolver } from './item-page.resolver'; -import { - dsoPageSingleFeatureGuard -} from '../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../core/data/remote-data'; -import { Item } from '../core/shared/item.model'; +import { itemPageResolver } from './item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring administrator rights */ export const itemPageAdministratorGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.AdministratorOf) + () => itemPageResolver, + () => observableOf(FeatureID.AdministratorOf), ); diff --git a/src/app/item-page/item-page-routes.ts b/src/app/item-page/item-page-routes.ts index 57aa70336d..684ea56459 100644 --- a/src/app/item-page/item-page-routes.ts +++ b/src/app/item-page/item-page-routes.ts @@ -1,7 +1,4 @@ -import { - mapToCanActivate, - Route, -} from '@angular/router'; +import { Route } from '@angular/router'; import { REQUEST_COPY_MODULE_PATH } from '../app-routing-paths'; import { authenticatedGuard } from '../core/auth/authenticated.guard'; @@ -19,7 +16,7 @@ import { UPLOAD_BITSTREAM_PATH, } from './item-page-routing-paths'; import { OrcidPageComponent } from './orcid-page/orcid-page.component'; -import { OrcidPageGuard } from './orcid-page/orcid-page.guard'; +import { orcidPageGuard } from './orcid-page/orcid-page.guard'; import { ThemedItemPageComponent } from './simple/themed-item-page.component'; import { versionResolver } from './version-page/version.resolver'; import { VersionPageComponent } from './version-page/version-page/version-page.component'; @@ -60,7 +57,7 @@ export const ROUTES: Route[] = [ { path: ORCID_PATH, component: OrcidPageComponent, - canActivate: [authenticatedGuard, ...mapToCanActivate([OrcidPageGuard])], + canActivate: [authenticatedGuard, orcidPageGuard], }, ], data: { diff --git a/src/app/item-page/orcid-page/orcid-page.guard.ts b/src/app/item-page/orcid-page/orcid-page.guard.ts index 947be3ee9f..c06ab7d97d 100644 --- a/src/app/item-page/orcid-page/orcid-page.guard.ts +++ b/src/app/item-page/orcid-page/orcid-page.guard.ts @@ -1,13 +1,9 @@ -import { inject } from '@angular/core'; -import { - dsoPageSingleFeatureGuard -} from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; -import { Item } from '../../core/shared/item.model'; -import { ItemPageResolver } from '../item-page.resolver'; -import { CanActivateFn, ResolveFn } from '@angular/router'; -import { Observable, of as observableOf } from 'rxjs'; +import { CanActivateFn } from '@angular/router'; +import { of as observableOf } from 'rxjs'; + +import { dsoPageSingleFeatureGuard } from '../../core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { RemoteData } from '../../core/data/remote-data'; +import { itemPageResolver } from '../item-page.resolver'; /** * Guard for preventing unauthorized access to certain {@link Item} pages requiring administrator rights @@ -15,9 +11,6 @@ import { RemoteData } from '../../core/data/remote-data'; */ export const orcidPageGuard: CanActivateFn = dsoPageSingleFeatureGuard( - () => { - const itemPageResolver = inject(ItemPageResolver); - return itemPageResolver.resolve as ResolveFn>>; - }, - () => observableOf(FeatureID.CanSynchronizeWithORCID) + () => itemPageResolver, + () => observableOf(FeatureID.CanSynchronizeWithORCID), ); diff --git a/src/app/statistics-page/statistics-page-routes.ts b/src/app/statistics-page/statistics-page-routes.ts index 41a91ee3aa..69bcc6b41c 100644 --- a/src/app/statistics-page/statistics-page-routes.ts +++ b/src/app/statistics-page/statistics-page-routes.ts @@ -1,12 +1,9 @@ -import { - mapToCanActivate, - Route, -} from '@angular/router'; +import { Route } from '@angular/router'; import { collectionPageResolver } from '../collection-page/collection-page.resolver'; import { communityPageResolver } from '../community-page/community-page.resolver'; import { i18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; -import { StatisticsAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard'; +import { statisticsAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard'; import { itemResolver } from '../item-page/item.resolver'; import { ThemedCollectionStatisticsPageComponent } from './collection-statistics-page/themed-collection-statistics-page.component'; import { ThemedCommunityStatisticsPageComponent } from './community-statistics-page/themed-community-statistics-page.component'; @@ -29,7 +26,7 @@ export const ROUTES: Route[] = [ component: ThemedSiteStatisticsPageComponent, }, ], - canActivate: mapToCanActivate([StatisticsAdministratorGuard]), + canActivate: [statisticsAdministratorGuard], }, { path: `items/:id`, @@ -42,7 +39,7 @@ export const ROUTES: Route[] = [ breadcrumbKey: 'statistics', }, component: ThemedItemStatisticsPageComponent, - canActivate: mapToCanActivate([StatisticsAdministratorGuard]), + canActivate: [statisticsAdministratorGuard], }, { path: `collections/:id`, @@ -55,7 +52,7 @@ export const ROUTES: Route[] = [ breadcrumbKey: 'statistics', }, component: ThemedCollectionStatisticsPageComponent, - canActivate: mapToCanActivate([StatisticsAdministratorGuard]), + canActivate: [statisticsAdministratorGuard], }, { path: `communities/:id`, @@ -68,6 +65,6 @@ export const ROUTES: Route[] = [ breadcrumbKey: 'statistics', }, component: ThemedCommunityStatisticsPageComponent, - canActivate: mapToCanActivate([StatisticsAdministratorGuard]), + canActivate: [statisticsAdministratorGuard], }, ]; diff --git a/src/app/system-wide-alert/system-wide-alert-routes.ts b/src/app/system-wide-alert/system-wide-alert-routes.ts index 2f3596825b..a71007b6b3 100644 --- a/src/app/system-wide-alert/system-wide-alert-routes.ts +++ b/src/app/system-wide-alert/system-wide-alert-routes.ts @@ -1,15 +1,12 @@ -import { - mapToCanActivate, - Route, -} from '@angular/router'; +import { Route } from '@angular/router'; -import { SiteAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; +import { siteAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; import { SystemWideAlertFormComponent } from './alert-form/system-wide-alert-form.component'; export const ROUTES: Route[] = [ { path: '', - canActivate: mapToCanActivate([SiteAdministratorGuard]), + canActivate: [siteAdministratorGuard], component: SystemWideAlertFormComponent, },