diff --git a/src/app/access-control/access-control-routing.module.ts b/src/app/access-control/access-control-routing.module.ts index cac49938a9..cf20309369 100644 --- a/src/app/access-control/access-control-routing.module.ts +++ b/src/app/access-control/access-control-routing.module.ts @@ -5,6 +5,7 @@ import { GroupFormComponent } from './group-registry/group-form/group-form.compo import { GroupsRegistryComponent } from './group-registry/groups-registry.component'; import { GROUP_EDIT_PATH } from './access-control-routing-paths'; import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; +import { GroupPageGuard } from './group-registry/group-page.guard'; @NgModule({ imports: [ @@ -39,7 +40,8 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso resolve: { breadcrumb: I18nBreadcrumbResolver }, - data: { title: 'admin.access-control.groups.title.singleGroup', breadcrumbKey: 'admin.access-control.groups.singleGroup' } + data: { title: 'admin.access-control.groups.title.singleGroup', breadcrumbKey: 'admin.access-control.groups.singleGroup' }, + canActivate: [GroupPageGuard] } ]) ] 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 new file mode 100644 index 0000000000..e6de64baea --- /dev/null +++ b/src/app/access-control/group-registry/group-page.guard.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { GroupPageGuard } from './group-page.guard'; + +describe('GroupPageGuard', () => { + let guard: GroupPageGuard; + + beforeEach(() => { + TestBed.configureTestingModule({}); + guard = TestBed.inject(GroupPageGuard); + }); + + it('should be created', () => { + expect(guard).toBeTruthy(); + }); +}); diff --git a/src/app/access-control/group-registry/group-page.guard.ts b/src/app/access-control/group-registry/group-page.guard.ts new file mode 100644 index 0000000000..057f67ddeb --- /dev/null +++ b/src/app/access-control/group-registry/group-page.guard.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router'; +import { Observable, of as observableOf } from 'rxjs'; +import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; +import { AuthService } from '../../core/auth/auth.service'; +import { SomeFeatureAuthorizationGuard } from '../../core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard'; +import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; +import { map } from 'rxjs/operators'; + +@Injectable({ + providedIn: 'root' +}) +export class GroupPageGuard extends SomeFeatureAuthorizationGuard { + + protected groupsEndpoint = 'groups'; + + constructor(protected halEndpointService: HALEndpointService, + protected authorizationService: AuthorizationDataService, + protected router: Router, + protected authService: AuthService) { + super(authorizationService, router, authService); + } + + getFeatureIDs(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + return observableOf([FeatureID.CanManageGroup]); + } + + getObjectUrl(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + return this.halEndpointService.getEndpoint(this.groupsEndpoint).pipe( + map(groupsUrl => `${groupsUrl}/${route?.params?.groupId}`) + ); + } + +} diff --git a/src/app/access-control/group-registry/groups-registry.component.html b/src/app/access-control/group-registry/groups-registry.component.html index e5e25ae944..59ffbf20be 100644 --- a/src/app/access-control/group-registry/groups-registry.component.html +++ b/src/app/access-control/group-registry/groups-registry.component.html @@ -59,11 +59,23 @@ {{groupDto.epersons?.totalElements + groupDto.subgroups?.totalElements}}
- + + + +