mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +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 { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
|
||||
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_AUTHORIZATIONS_PATH = ':id/authorizations';
|
||||
@@ -58,7 +59,7 @@ const EDIT_BITSTREAM_AUTHORIZATIONS_PATH = ':id/authorizations';
|
||||
},
|
||||
{
|
||||
path: EDIT_BITSTREAM_AUTHORIZATIONS_PATH,
|
||||
|
||||
canActivate: [bitstreamPageAuthorizationsGuard],
|
||||
children: [
|
||||
{
|
||||
path: 'create',
|
||||
|
@@ -42,6 +42,10 @@ import { itemPageWithdrawGuard } from './item-page-withdraw.guard';
|
||||
import { itemPageReinstateGuard } from './item-page-reinstate.guard';
|
||||
import { itemPageRegisterDoiGuard } from './item-page-register-doi.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
|
||||
@@ -142,6 +146,7 @@ import { itemPageVersionHistoryGuard } from './item-page-version-history.guard';
|
||||
{
|
||||
path: ITEM_EDIT_PRIVATE_PATH,
|
||||
component: ItemPrivateComponent,
|
||||
canActivate: [itemPagePrivateGuard]
|
||||
},
|
||||
{
|
||||
path: ITEM_EDIT_PUBLIC_PATH,
|
||||
@@ -150,11 +155,13 @@ import { itemPageVersionHistoryGuard } from './item-page-version-history.guard';
|
||||
{
|
||||
path: ITEM_EDIT_DELETE_PATH,
|
||||
component: ItemDeleteComponent,
|
||||
canActivate: [itemPageDeleteGuard]
|
||||
},
|
||||
{
|
||||
path: ITEM_EDIT_MOVE_PATH,
|
||||
component: ItemMoveComponent,
|
||||
data: { title: 'item.edit.move.title' },
|
||||
canActivate: [itemPageMoveGuard]
|
||||
},
|
||||
{
|
||||
path: ITEM_EDIT_REGISTER_DOI_PATH,
|
||||
@@ -179,7 +186,8 @@ import { itemPageVersionHistoryGuard } from './item-page-version-history.guard';
|
||||
resourcePolicy: ResourcePolicyResolver
|
||||
},
|
||||
component: ResourcePolicyEditComponent,
|
||||
data: { title: 'resource-policies.edit.page.title' }
|
||||
data: { title: 'resource-policies.edit.page.title' },
|
||||
canActivate: [itemPageEditAuthorizationsGuard]
|
||||
},
|
||||
{
|
||||
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