80113: Set ableToEdit on GroupDTOModel

This commit is contained in:
Bruno Roemers
2021-06-15 15:40:35 +02:00
parent 2cd78470ce
commit a69a4e9696
3 changed files with 43 additions and 23 deletions

View File

@@ -141,29 +141,35 @@ export class GroupsRegistryComponent implements OnInit, OnDestroy {
if (groups.page.length === 0) { if (groups.page.length === 0) {
return observableOf(buildPaginatedList(groups.pageInfo, [])); return observableOf(buildPaginatedList(groups.pageInfo, []));
} }
return observableCombineLatest(groups.page.map((group: Group) => { return this.authorizationService.isAuthorized(FeatureID.AdministratorOf).pipe(
if (!this.deletedGroupsIds.includes(group.id)) { switchMap((isSiteAdmin: boolean) => {
return observableCombineLatest([ return observableCombineLatest(groups.page.map((group: Group) => {
this.authorizationService.isAuthorized(FeatureID.CanDelete, hasValue(group) ? group.self : undefined), if (hasValue(group) && !this.deletedGroupsIds.includes(group.id)) {
this.hasLinkedDSO(group), return observableCombineLatest([
this.getSubgroups(group), this.authorizationService.isAuthorized(FeatureID.CanDelete, group.self),
this.getMembers(group) this.canManageGroup$(isSiteAdmin, group),
]).pipe( this.hasLinkedDSO(group),
map(([isAuthorized, hasLinkedDSO, subgroups, members]: this.getSubgroups(group),
[boolean, boolean, RemoteData<PaginatedList<Group>>, RemoteData<PaginatedList<EPerson>>]) => { this.getMembers(group)
const groupDtoModel: GroupDtoModel = new GroupDtoModel(); ]).pipe(
groupDtoModel.ableToDelete = isAuthorized && !hasLinkedDSO; map(([canDelete, canManageGroup, hasLinkedDSO, subgroups, members]:
groupDtoModel.group = group; [boolean, boolean, boolean, RemoteData<PaginatedList<Group>>, RemoteData<PaginatedList<EPerson>>]) => {
groupDtoModel.subgroups = subgroups.payload; const groupDtoModel: GroupDtoModel = new GroupDtoModel();
groupDtoModel.epersons = members.payload; groupDtoModel.ableToDelete = canDelete && !hasLinkedDSO;
return groupDtoModel; groupDtoModel.ableToEdit = canManageGroup;
} groupDtoModel.group = group;
) groupDtoModel.subgroups = subgroups.payload;
); groupDtoModel.epersons = members.payload;
} return groupDtoModel;
})).pipe(map((dtos: GroupDtoModel[]) => { }
return buildPaginatedList(groups.pageInfo, dtos); )
})); );
}
})).pipe(map((dtos: GroupDtoModel[]) => {
return buildPaginatedList(groups.pageInfo, dtos);
}));
})
);
}) })
).subscribe((value: PaginatedList<GroupDtoModel>) => { ).subscribe((value: PaginatedList<GroupDtoModel>) => {
this.groupsDto$.next(value); this.groupsDto$.next(value);
@@ -174,6 +180,14 @@ export class GroupsRegistryComponent implements OnInit, OnDestroy {
this.subs.push(this.searchSub); this.subs.push(this.searchSub);
} }
canManageGroup$(isSiteAdmin: boolean, group: Group): Observable<boolean> {
if (isSiteAdmin) {
return observableOf(true);
} else {
return this.authorizationService.isAuthorized(FeatureID.CanManageGroup, group.self);
}
}
/** /**
* Delete Group * Delete Group
*/ */

View File

@@ -10,6 +10,7 @@ export enum FeatureID {
ReinstateItem = 'reinstateItem', ReinstateItem = 'reinstateItem',
EPersonRegistration = 'epersonRegistration', EPersonRegistration = 'epersonRegistration',
CanManageGroups = 'canManageGroups', CanManageGroups = 'canManageGroups',
CanManageGroup = 'canManageGroup',
IsCollectionAdmin = 'isCollectionAdmin', IsCollectionAdmin = 'isCollectionAdmin',
IsCommunityAdmin = 'isCommunityAdmin', IsCommunityAdmin = 'isCommunityAdmin',
CanDownload = 'canDownload', CanDownload = 'canDownload',

View File

@@ -17,6 +17,11 @@ export class GroupDtoModel {
*/ */
public ableToDelete: boolean; public ableToDelete: boolean;
/**
* Whether or not the current user is able to edit the linked group
*/
public ableToEdit: boolean;
/** /**
* List of subgroups of this group * List of subgroups of this group
*/ */