mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
114858: Create and Add Guards to item&bitstream routes
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
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 { 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';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guard for preventing unauthorized access to certain {@link Bitstream} pages requiring specific authorizations.
|
||||||
|
* Checks authorization rights for managing policies.
|
||||||
|
*/
|
||||||
|
export const bitstreamPageAuthorizationsGuard: CanActivateFn =
|
||||||
|
dsoPageSingleFeatureGuard(
|
||||||
|
() => {
|
||||||
|
const bitstreamPageResolver = inject(BitstreamPageResolver);
|
||||||
|
return bitstreamPageResolver.resolve as ResolveFn<Observable<RemoteData<Bitstream>>>;
|
||||||
|
},
|
||||||
|
() => observableOf(FeatureID.CanManagePolicies)
|
||||||
|
);
|
@@ -13,6 +13,7 @@ import { BitstreamBreadcrumbResolver } from '../core/breadcrumbs/bitstream-bread
|
|||||||
import { BitstreamBreadcrumbsService } from '../core/breadcrumbs/bitstream-breadcrumbs.service';
|
import { BitstreamBreadcrumbsService } from '../core/breadcrumbs/bitstream-breadcrumbs.service';
|
||||||
import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
|
import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
|
||||||
import { ThemedEditBitstreamPageComponent } from './edit-bitstream-page/themed-edit-bitstream-page.component';
|
import { ThemedEditBitstreamPageComponent } from './edit-bitstream-page/themed-edit-bitstream-page.component';
|
||||||
|
import { bitstreamPageAuthorizationsGuard } from './bitstream-page-authorizations.guard';
|
||||||
|
|
||||||
const EDIT_BITSTREAM_PATH = ':id/edit';
|
const EDIT_BITSTREAM_PATH = ':id/edit';
|
||||||
const EDIT_BITSTREAM_AUTHORIZATIONS_PATH = ':id/authorizations';
|
const EDIT_BITSTREAM_AUTHORIZATIONS_PATH = ':id/authorizations';
|
||||||
@@ -58,7 +59,7 @@ const EDIT_BITSTREAM_AUTHORIZATIONS_PATH = ':id/authorizations';
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: EDIT_BITSTREAM_AUTHORIZATIONS_PATH,
|
path: EDIT_BITSTREAM_AUTHORIZATIONS_PATH,
|
||||||
|
canActivate: [bitstreamPageAuthorizationsGuard],
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'create',
|
path: 'create',
|
||||||
|
@@ -42,6 +42,10 @@ import { itemPageWithdrawGuard } from './item-page-withdraw.guard';
|
|||||||
import { itemPageReinstateGuard } from './item-page-reinstate.guard';
|
import { itemPageReinstateGuard } from './item-page-reinstate.guard';
|
||||||
import { itemPageRegisterDoiGuard } from './item-page-register-doi.guard';
|
import { itemPageRegisterDoiGuard } from './item-page-register-doi.guard';
|
||||||
import { itemPageVersionHistoryGuard } from './item-page-version-history.guard';
|
import { itemPageVersionHistoryGuard } from './item-page-version-history.guard';
|
||||||
|
import { itemPagePrivateGuard } from './item-page-private.guard';
|
||||||
|
import { itemPageMoveGuard } from './item-page-move.guard';
|
||||||
|
import { itemPageDeleteGuard } from './item-page-delete.guard';
|
||||||
|
import { itemPageEditAuthorizationsGuard } from './item-page-edit-authorizations.guard';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Routing module that handles the routing for the Edit Item page administrator functionality
|
* Routing module that handles the routing for the Edit Item page administrator functionality
|
||||||
@@ -142,6 +146,7 @@ import { itemPageVersionHistoryGuard } from './item-page-version-history.guard';
|
|||||||
{
|
{
|
||||||
path: ITEM_EDIT_PRIVATE_PATH,
|
path: ITEM_EDIT_PRIVATE_PATH,
|
||||||
component: ItemPrivateComponent,
|
component: ItemPrivateComponent,
|
||||||
|
canActivate: [itemPagePrivateGuard]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: ITEM_EDIT_PUBLIC_PATH,
|
path: ITEM_EDIT_PUBLIC_PATH,
|
||||||
@@ -150,11 +155,13 @@ import { itemPageVersionHistoryGuard } from './item-page-version-history.guard';
|
|||||||
{
|
{
|
||||||
path: ITEM_EDIT_DELETE_PATH,
|
path: ITEM_EDIT_DELETE_PATH,
|
||||||
component: ItemDeleteComponent,
|
component: ItemDeleteComponent,
|
||||||
|
canActivate: [itemPageDeleteGuard]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: ITEM_EDIT_MOVE_PATH,
|
path: ITEM_EDIT_MOVE_PATH,
|
||||||
component: ItemMoveComponent,
|
component: ItemMoveComponent,
|
||||||
data: { title: 'item.edit.move.title' },
|
data: { title: 'item.edit.move.title' },
|
||||||
|
canActivate: [itemPageMoveGuard]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: ITEM_EDIT_REGISTER_DOI_PATH,
|
path: ITEM_EDIT_REGISTER_DOI_PATH,
|
||||||
@@ -179,7 +186,8 @@ import { itemPageVersionHistoryGuard } from './item-page-version-history.guard';
|
|||||||
resourcePolicy: ResourcePolicyResolver
|
resourcePolicy: ResourcePolicyResolver
|
||||||
},
|
},
|
||||||
component: ResourcePolicyEditComponent,
|
component: ResourcePolicyEditComponent,
|
||||||
data: { title: 'resource-policies.edit.page.title' }
|
data: { title: 'resource-policies.edit.page.title' },
|
||||||
|
canActivate: [itemPageEditAuthorizationsGuard]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
|
23
src/app/item-page/edit-item-page/item-page-delete.guard.ts
Normal file
23
src/app/item-page/edit-item-page/item-page-delete.guard.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
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 { FeatureID } from '../../core/data/feature-authorization/feature-id';
|
||||||
|
import { RemoteData } from '../../core/data/remote-data';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guard for preventing unauthorized access to certain {@link Item} pages requiring specific authorizations.
|
||||||
|
* Checks authorization rights for deleting items.
|
||||||
|
*/
|
||||||
|
export const itemPageDeleteGuard: CanActivateFn =
|
||||||
|
dsoPageSingleFeatureGuard(
|
||||||
|
() => {
|
||||||
|
const itemPageResolver = inject(ItemPageResolver);
|
||||||
|
return itemPageResolver.resolve as ResolveFn<Observable<RemoteData<Item>>>;
|
||||||
|
},
|
||||||
|
() => observableOf(FeatureID.CanDelete)
|
||||||
|
);
|
@@ -0,0 +1,23 @@
|
|||||||
|
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 { FeatureID } from '../../core/data/feature-authorization/feature-id';
|
||||||
|
import { RemoteData } from '../../core/data/remote-data';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guard for preventing unauthorized access to certain {@link Item} pages requiring specific authorizations.
|
||||||
|
* Checks authorization rights for managing policies.
|
||||||
|
*/
|
||||||
|
export const itemPageEditAuthorizationsGuard: CanActivateFn =
|
||||||
|
dsoPageSingleFeatureGuard(
|
||||||
|
() => {
|
||||||
|
const itemPageResolver = inject(ItemPageResolver);
|
||||||
|
return itemPageResolver.resolve as ResolveFn<Observable<RemoteData<Item>>>;
|
||||||
|
},
|
||||||
|
() => observableOf(FeatureID.CanManagePolicies)
|
||||||
|
);
|
23
src/app/item-page/edit-item-page/item-page-move.guard.ts
Normal file
23
src/app/item-page/edit-item-page/item-page-move.guard.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
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 { FeatureID } from '../../core/data/feature-authorization/feature-id';
|
||||||
|
import { RemoteData } from '../../core/data/remote-data';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guard for preventing unauthorized access to certain {@link Item} pages requiring specific authorizations.
|
||||||
|
* Checks authorization rights for moving items.
|
||||||
|
*/
|
||||||
|
export const itemPageMoveGuard: CanActivateFn =
|
||||||
|
dsoPageSingleFeatureGuard(
|
||||||
|
() => {
|
||||||
|
const itemPageResolver = inject(ItemPageResolver);
|
||||||
|
return itemPageResolver.resolve as ResolveFn<Observable<RemoteData<Item>>>;
|
||||||
|
},
|
||||||
|
() => observableOf(FeatureID.CanMove)
|
||||||
|
);
|
23
src/app/item-page/edit-item-page/item-page-private.guard.ts
Normal file
23
src/app/item-page/edit-item-page/item-page-private.guard.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
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 { FeatureID } from '../../core/data/feature-authorization/feature-id';
|
||||||
|
import { RemoteData } from '../../core/data/remote-data';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guard for preventing unauthorized access to certain {@link Item} pages requiring specific authorizations.
|
||||||
|
* Checks authorization rights for making items private.
|
||||||
|
*/
|
||||||
|
export const itemPagePrivateGuard: CanActivateFn =
|
||||||
|
dsoPageSingleFeatureGuard(
|
||||||
|
() => {
|
||||||
|
const itemPageResolver = inject(ItemPageResolver);
|
||||||
|
return itemPageResolver.resolve as ResolveFn<Observable<RemoteData<Item>>>;
|
||||||
|
},
|
||||||
|
() => observableOf(FeatureID.CanMakePrivate)
|
||||||
|
);
|
Reference in New Issue
Block a user