Commits

Bruno Roemers authored a69a4e96962
80113: Set ableToEdit on GroupDTOModel
No tags

src/app/access-control/group-registry/groups-registry.component.ts

Modified
134 134 currentPage: paginationOptions.currentPage,
135 135 elementsPerPage: paginationOptions.pageSize
136 136 });
137 137 }),
138 138 getAllSucceededRemoteData(),
139 139 getRemoteDataPayload(),
140 140 switchMap((groups: PaginatedList<Group>) => {
141 141 if (groups.page.length === 0) {
142 142 return observableOf(buildPaginatedList(groups.pageInfo, []));
143 143 }
144 - return observableCombineLatest(groups.page.map((group: Group) => {
145 - if (!this.deletedGroupsIds.includes(group.id)) {
146 - return observableCombineLatest([
147 - this.authorizationService.isAuthorized(FeatureID.CanDelete, hasValue(group) ? group.self : undefined),
148 - this.hasLinkedDSO(group),
149 - this.getSubgroups(group),
150 - this.getMembers(group)
151 - ]).pipe(
152 - map(([isAuthorized, hasLinkedDSO, subgroups, members]:
153 - [boolean, boolean, RemoteData<PaginatedList<Group>>, RemoteData<PaginatedList<EPerson>>]) => {
154 - const groupDtoModel: GroupDtoModel = new GroupDtoModel();
155 - groupDtoModel.ableToDelete = isAuthorized && !hasLinkedDSO;
156 - groupDtoModel.group = group;
157 - groupDtoModel.subgroups = subgroups.payload;
158 - groupDtoModel.epersons = members.payload;
159 - return groupDtoModel;
160 - }
161 - )
162 - );
163 - }
164 - })).pipe(map((dtos: GroupDtoModel[]) => {
165 - return buildPaginatedList(groups.pageInfo, dtos);
166 - }));
144 + return this.authorizationService.isAuthorized(FeatureID.AdministratorOf).pipe(
145 + switchMap((isSiteAdmin: boolean) => {
146 + return observableCombineLatest(groups.page.map((group: Group) => {
147 + if (hasValue(group) && !this.deletedGroupsIds.includes(group.id)) {
148 + return observableCombineLatest([
149 + this.authorizationService.isAuthorized(FeatureID.CanDelete, group.self),
150 + this.canManageGroup$(isSiteAdmin, group),
151 + this.hasLinkedDSO(group),
152 + this.getSubgroups(group),
153 + this.getMembers(group)
154 + ]).pipe(
155 + map(([canDelete, canManageGroup, hasLinkedDSO, subgroups, members]:
156 + [boolean, boolean, boolean, RemoteData<PaginatedList<Group>>, RemoteData<PaginatedList<EPerson>>]) => {
157 + const groupDtoModel: GroupDtoModel = new GroupDtoModel();
158 + groupDtoModel.ableToDelete = canDelete && !hasLinkedDSO;
159 + groupDtoModel.ableToEdit = canManageGroup;
160 + groupDtoModel.group = group;
161 + groupDtoModel.subgroups = subgroups.payload;
162 + groupDtoModel.epersons = members.payload;
163 + return groupDtoModel;
164 + }
165 + )
166 + );
167 + }
168 + })).pipe(map((dtos: GroupDtoModel[]) => {
169 + return buildPaginatedList(groups.pageInfo, dtos);
170 + }));
171 + })
172 + );
167 173 })
168 174 ).subscribe((value: PaginatedList<GroupDtoModel>) => {
169 175 this.groupsDto$.next(value);
170 176 this.pageInfoState$.next(value.pageInfo);
171 177 this.searching$.next(false);
172 178 });
173 179
174 180 this.subs.push(this.searchSub);
175 181 }
176 182
183 + canManageGroup$(isSiteAdmin: boolean, group: Group): Observable<boolean> {
184 + if (isSiteAdmin) {
185 + return observableOf(true);
186 + } else {
187 + return this.authorizationService.isAuthorized(FeatureID.CanManageGroup, group.self);
188 + }
189 + }
190 +
177 191 /**
178 192 * Delete Group
179 193 */
180 194 deleteGroup(group: GroupDtoModel) {
181 195 if (hasValue(group.group.id)) {
182 196 this.groupService.delete(group.group.id).pipe(getFirstCompletedRemoteData())
183 197 .subscribe((rd: RemoteData<NoContent>) => {
184 198 if (rd.hasSucceeded) {
185 199 this.deletedGroupsIds = [...this.deletedGroupsIds, group.group.id];
186 200 this.notificationsService.success(this.translateService.get(this.messagePrefix + 'notification.deleted.success', { name: group.group.name }));

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut