From 459887779f9868cb6c96b6d9108594e5e84145ef Mon Sep 17 00:00:00 2001 From: gauravd2t Date: Wed, 11 Mar 2026 10:56:44 +0530 Subject: [PATCH 1/7] isController and isAdmin remove hard coded return --- src/app/core/roles/role.service.ts | 32 ++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/app/core/roles/role.service.ts b/src/app/core/roles/role.service.ts index 365a5cbbb31..0b5618589ff 100644 --- a/src/app/core/roles/role.service.ts +++ b/src/app/core/roles/role.service.ts @@ -1,10 +1,15 @@ import { Injectable } from '@angular/core'; import { + combineLatest, Observable, - of, } from 'rxjs'; -import { distinctUntilChanged } from 'rxjs/operators'; +import { + distinctUntilChanged, + map, +} from 'rxjs/operators'; +import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; +import { FeatureID } from '../data/feature-authorization/feature-id'; import { CollectionDataService } from '../data/collection-data.service'; import { RoleType } from './role-types'; @@ -19,32 +24,39 @@ export class RoleService { * * @param {CollectionDataService} collectionService */ - constructor(private collectionService: CollectionDataService) { + constructor( + private collectionService: CollectionDataService, + private authorizationService: AuthorizationDataService, + ) { } /** * Check if current user is a submitter */ isSubmitter(): Observable { - return this.collectionService.hasAuthorizedCollection().pipe( - distinctUntilChanged(), - ); + return this.collectionService.hasAuthorizedCollection().pipe(distinctUntilChanged()); } /** * Check if current user is a controller */ isController(): Observable { - // TODO find a way to check if user is a controller - return of(true); + return combineLatest([ + this.authorizationService.isAuthorized(FeatureID.IsCollectionAdmin), + this.authorizationService.isAuthorized(FeatureID.IsCommunityAdmin), + ]).pipe( + map(([isCollectionAdmin, isCommunityAdmin]) => isCollectionAdmin || isCommunityAdmin), + distinctUntilChanged(), + ); } /** * Check if current user is an admin */ isAdmin(): Observable { - // TODO find a way to check if user is an admin - return of(false); + return this.authorizationService.isAuthorized(FeatureID.AdministratorOf).pipe( + distinctUntilChanged(), + ); } /** From bd15b313a9a08b741c90ba92ccc92c6b278dd89d Mon Sep 17 00:00:00 2001 From: gauravd2t Date: Wed, 11 Mar 2026 11:40:20 +0530 Subject: [PATCH 2/7] autofix to sort these imports --- src/app/core/roles/role.service.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/app/core/roles/role.service.ts b/src/app/core/roles/role.service.ts index 0b5618589ff..8ce6bde1308 100644 --- a/src/app/core/roles/role.service.ts +++ b/src/app/core/roles/role.service.ts @@ -1,13 +1,6 @@ import { Injectable } from '@angular/core'; -import { - combineLatest, - Observable, -} from 'rxjs'; -import { - distinctUntilChanged, - map, -} from 'rxjs/operators'; - +import { Observable, combineLatest } from 'rxjs'; +import { distinctUntilChanged, map } from 'rxjs/operators'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { FeatureID } from '../data/feature-authorization/feature-id'; import { CollectionDataService } from '../data/collection-data.service'; From fabc35a5921e7d4af8967cf28e6940220a98cd12 Mon Sep 17 00:00:00 2001 From: gauravd2t Date: Wed, 11 Mar 2026 11:47:37 +0530 Subject: [PATCH 3/7] Run autofix to sort these imports! --- src/app/core/roles/role.service.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/app/core/roles/role.service.ts b/src/app/core/roles/role.service.ts index 8ce6bde1308..0b5618589ff 100644 --- a/src/app/core/roles/role.service.ts +++ b/src/app/core/roles/role.service.ts @@ -1,6 +1,13 @@ import { Injectable } from '@angular/core'; -import { Observable, combineLatest } from 'rxjs'; -import { distinctUntilChanged, map } from 'rxjs/operators'; +import { + combineLatest, + Observable, +} from 'rxjs'; +import { + distinctUntilChanged, + map, +} from 'rxjs/operators'; + import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { FeatureID } from '../data/feature-authorization/feature-id'; import { CollectionDataService } from '../data/collection-data.service'; From 3a30b09a51db2155e91d02b16615e48ce727f23f Mon Sep 17 00:00:00 2001 From: gauravd2t Date: Wed, 11 Mar 2026 12:21:44 +0530 Subject: [PATCH 4/7] sort imports to satisfy eslint simple-import-sort rule --- src/app/core/roles/role.service.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/core/roles/role.service.ts b/src/app/core/roles/role.service.ts index 0b5618589ff..6d68accde0d 100644 --- a/src/app/core/roles/role.service.ts +++ b/src/app/core/roles/role.service.ts @@ -8,11 +8,10 @@ import { map, } from 'rxjs/operators'; +import { CollectionDataService } from '../data/collection-data.service'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { FeatureID } from '../data/feature-authorization/feature-id'; -import { CollectionDataService } from '../data/collection-data.service'; import { RoleType } from './role-types'; - /** * A service that provides methods to identify user role. */ From a3b2789330b7a2446d9320af2031fd667919fad0 Mon Sep 17 00:00:00 2001 From: gauravd2t Date: Thu, 12 Mar 2026 13:28:50 +0530 Subject: [PATCH 5/7] infinite loop --- src/app/my-dspace-page/my-dspace-configuration.service.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/app/my-dspace-page/my-dspace-configuration.service.ts b/src/app/my-dspace-page/my-dspace-configuration.service.ts index 7c4feb1b4db..ba7c9c7247d 100644 --- a/src/app/my-dspace-page/my-dspace-configuration.service.ts +++ b/src/app/my-dspace-page/my-dspace-configuration.service.ts @@ -128,6 +128,9 @@ export class MyDSpaceConfigurationService extends SearchConfigurationService { availableConf.push(MyDSpaceConfigurationValueType.SupervisedItems); availableConf.push(MyDSpaceConfigurationValueType.Workflow); } + if (!isSubmitter && !isController && !isAdmin) { + availableConf.push(MyDSpaceConfigurationValueType.Workspace); + } return availableConf; })); } From 6f562af798e0bbdc79f895a7a68b15af280f9130 Mon Sep 17 00:00:00 2001 From: gauravd2t Date: Fri, 13 Mar 2026 16:10:40 +0530 Subject: [PATCH 6/7] remove extra condition --- src/app/my-dspace-page/my-dspace-configuration.service.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/app/my-dspace-page/my-dspace-configuration.service.ts b/src/app/my-dspace-page/my-dspace-configuration.service.ts index ba7c9c7247d..c9f4e68630c 100644 --- a/src/app/my-dspace-page/my-dspace-configuration.service.ts +++ b/src/app/my-dspace-page/my-dspace-configuration.service.ts @@ -121,16 +121,11 @@ export class MyDSpaceConfigurationService extends SearchConfigurationService { first(), map(([isSubmitter, isController, isAdmin]: [boolean, boolean, boolean]) => { const availableConf: MyDSpaceConfigurationValueType[] = []; - if (isSubmitter) { - availableConf.push(MyDSpaceConfigurationValueType.Workspace); - } + availableConf.push(MyDSpaceConfigurationValueType.Workspace); if (isController || isAdmin) { availableConf.push(MyDSpaceConfigurationValueType.SupervisedItems); availableConf.push(MyDSpaceConfigurationValueType.Workflow); } - if (!isSubmitter && !isController && !isAdmin) { - availableConf.push(MyDSpaceConfigurationValueType.Workspace); - } return availableConf; })); } From 05b0558cc08f6a3193717f83619963cfff64f603 Mon Sep 17 00:00:00 2001 From: gauravd2t Date: Fri, 13 Mar 2026 16:35:02 +0530 Subject: [PATCH 7/7] revert code --- src/app/my-dspace-page/my-dspace-configuration.service.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app/my-dspace-page/my-dspace-configuration.service.ts b/src/app/my-dspace-page/my-dspace-configuration.service.ts index c9f4e68630c..ba7c9c7247d 100644 --- a/src/app/my-dspace-page/my-dspace-configuration.service.ts +++ b/src/app/my-dspace-page/my-dspace-configuration.service.ts @@ -121,11 +121,16 @@ export class MyDSpaceConfigurationService extends SearchConfigurationService { first(), map(([isSubmitter, isController, isAdmin]: [boolean, boolean, boolean]) => { const availableConf: MyDSpaceConfigurationValueType[] = []; - availableConf.push(MyDSpaceConfigurationValueType.Workspace); + if (isSubmitter) { + availableConf.push(MyDSpaceConfigurationValueType.Workspace); + } if (isController || isAdmin) { availableConf.push(MyDSpaceConfigurationValueType.SupervisedItems); availableConf.push(MyDSpaceConfigurationValueType.Workflow); } + if (!isSubmitter && !isController && !isAdmin) { + availableConf.push(MyDSpaceConfigurationValueType.Workspace); + } return availableConf; })); }