Skip to content

Commit dc6e341

Browse files
committed
fix content developer admin permissions
1 parent dc9f287 commit dc6e341

21 files changed

+80
-130
lines changed

src/app/components/admin/admin-articles/admin-articles.component.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@ import { Observable, Subject } from 'rxjs';
1919
import { takeUntil } from 'rxjs/operators';
2020
import { AdminArticleEditDialogComponent } from 'src/app/components/admin/admin-article-edit-dialog/admin-article-edit-dialog.component';
2121
import { DialogService } from 'src/app/services/dialog/dialog.service';
22+
import { PermissionDataService } from 'src/app/data/permission/permission-data.service';
2223

2324
@Component({
2425
selector: 'app-admin-articles',
2526
templateUrl: './admin-articles.component.html',
2627
styleUrls: ['./admin-articles.component.scss'],
2728
})
2829
export class AdminArticlesComponent implements OnDestroy {
29-
@Input() canEdit: boolean;
30+
canEdit = false;
3031
pageSize = 10;
3132
pageIndex = 0;
3233
newArticle: Article = { id: '', name: '' };
@@ -60,7 +61,8 @@ export class AdminArticlesComponent implements OnDestroy {
6061
private cardDataService: CardDataService,
6162
private cardQuery: CardQuery,
6263
private collectionDataService: CollectionDataService,
63-
private collectionQuery: CollectionQuery
64+
private collectionQuery: CollectionQuery,
65+
private permissionDataService: PermissionDataService
6466
) {
6567
this.articleDataService.unload();
6668
this.topbarColor = this.settingsService.settings.AppTopBarHexColor
@@ -128,6 +130,7 @@ export class AdminArticlesComponent implements OnDestroy {
128130

129131
loadCollectionData() {
130132
this.cardDataService.loadByCollection(this.selectedCollectionId);
133+
this.canEdit = this.permissionDataService.canEditCollection(this.selectedCollectionId);
131134
this.selectedCardId = '';
132135
this.loadArticleData();
133136
}

src/app/components/admin/admin-card-edit-dialog/admin-card-edit-dialog.component.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@
2222
<mat-form-field class="full-width">
2323
<input type="text" matInput [formControl]="cardNameFormControl" placeholder="Name (required)" (blur)="saveCard('name')"
2424
value="{{data.card.name}}">
25-
<mat-error *ngIf="cardNameFormControl.hasError('minlength') && !cardNameFormControl.hasError('required')">
26-
Must contain {{ MIN_NAME_LENGTH }} or more characters
27-
</mat-error>
2825
<mat-error *ngIf="cardNameFormControl.hasError('required')">
2926
Name is <strong>required</strong>
3027
</mat-error>

src/app/components/admin/admin-card-edit-dialog/admin-card-edit-dialog.component.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ export class UserErrorStateMatcher implements ErrorStateMatcher {
2323
}
2424
}
2525

26-
const MIN_NAME_LENGTH = 3;
27-
2826
@Component({
2927
selector: 'app-admin-card-edit-dialog',
3028
templateUrl: './admin-card-edit-dialog.component.html',
@@ -38,7 +36,6 @@ export class AdminCardEditDialogComponent {
3836
this.data.card.name,
3937
[
4038
Validators.required,
41-
Validators.minLength(MIN_NAME_LENGTH),
4239
]
4340
);
4441
public cardDescriptionFormControl = new UntypedFormControl(
@@ -53,8 +50,6 @@ export class AdminCardEditDialogComponent {
5350
);
5451
public collectionList = this.data.collectionList;
5552

56-
readonly MIN_NAME_LENGTH = MIN_NAME_LENGTH;
57-
5853
constructor(
5954
public dialogService: DialogService,
6055
dialogRef: MatDialogRef<AdminCardEditDialogComponent>,

src/app/components/admin/admin-cards/admin-cards.component.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ import { takeUntil } from 'rxjs/operators';
1717
import { MatLegacyDialog as MatDialog } from '@angular/material/legacy-dialog';
1818
import { AdminCardEditDialogComponent } from 'src/app/components/admin/admin-card-edit-dialog/admin-card-edit-dialog.component';
1919
import { DialogService } from 'src/app/services/dialog/dialog.service';
20+
import { PermissionDataService } from 'src/app/data/permission/permission-data.service';
2021

2122
@Component({
2223
selector: 'app-admin-cards',
2324
templateUrl: './admin-cards.component.html',
2425
styleUrls: ['./admin-cards.component.scss'],
2526
})
2627
export class AdminCardsComponent implements OnDestroy {
27-
@Input() canEdit: boolean;
28+
canEdit = false;
2829
pageSize = 10;
2930
pageIndex = 0;
3031
collectionList: Collection[] = [];
@@ -51,7 +52,8 @@ export class AdminCardsComponent implements OnDestroy {
5152
private collectionDataService: CollectionDataService,
5253
private collectionQuery: CollectionQuery,
5354
private cardDataService: CardDataService,
54-
private cardQuery: CardQuery
55+
private cardQuery: CardQuery,
56+
private permissionDataService: PermissionDataService
5557
) {
5658
this.topbarColor = this.settingsService.settings.AppTopBarHexColor
5759
? this.settingsService.settings.AppTopBarHexColor
@@ -68,7 +70,6 @@ export class AdminCardsComponent implements OnDestroy {
6870
});
6971
});
7072
this.collectionList = this.collectionQuery.getActive() as Collection[];
71-
this.selectedCollectionId = this.collectionQuery.getActiveId();
7273
this.collectionQuery.selectAll().pipe(takeUntil(this.unsubscribe$)).subscribe(collections => {
7374
this.collectionList = collections;
7475
});
@@ -77,6 +78,7 @@ export class AdminCardsComponent implements OnDestroy {
7778
this.applyFilter();
7879
this.isLoading = false;
7980
});
81+
this.selectedCollectionId = this.collectionQuery.getActiveId();
8082
if (this.selectedCollectionId) {
8183
this.loadCards();
8284
}
@@ -98,6 +100,7 @@ export class AdminCardsComponent implements OnDestroy {
98100
loadCards() {
99101
this.isLoading = true;
100102
this.cardDataService.loadByCollection(this.selectedCollectionId);
103+
this.canEdit = this.permissionDataService.canEditCollection(this.selectedCollectionId);
101104
}
102105

103106
addOrEditCard(card: Card) {

src/app/components/admin/admin-collection-edit-dialog/admin-collection-edit-dialog.component.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@
2323
<mat-form-field class="full-width">
2424
<input type="text" matInput [formControl]="collectionNameFormControl" placeholder="Name (required)" (blur)="saveCollection('name')"
2525
value="{{data.collection.name}}">
26-
<mat-error *ngIf="collectionNameFormControl.hasError('minlength') && !collectionNameFormControl.hasError('required')">
27-
Must contain {{ MIN_NAME_LENGTH }} or more characters
28-
</mat-error>
2926
<mat-error *ngIf="collectionNameFormControl.hasError('required')">
3027
Name is <strong>required</strong>
3128
</mat-error>

src/app/components/admin/admin-collection-edit-dialog/admin-collection-edit-dialog.component.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ export class UserErrorStateMatcher implements ErrorStateMatcher {
2323
}
2424
}
2525

26-
const MIN_NAME_LENGTH = 3;
27-
2826
@Component({
2927
selector: 'app-admin-collection-edit-dialog',
3028
templateUrl: './admin-collection-edit-dialog.component.html',
@@ -38,16 +36,13 @@ export class AdminCollectionEditDialogComponent {
3836
this.data.collection.name,
3937
[
4038
Validators.required,
41-
Validators.minLength(MIN_NAME_LENGTH),
4239
]
4340
);
4441
public descriptionFormControl = new UntypedFormControl(
4542
this.data.collection.description ,
4643
[]
4744
);
4845

49-
readonly MIN_NAME_LENGTH = MIN_NAME_LENGTH;
50-
5146
constructor(
5247
public dialogService: DialogService,
5348
dialogRef: MatDialogRef<AdminCollectionEditDialogComponent>,

src/app/components/admin/admin-collections/admin-collections.component.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,15 @@
5555
(click)="addOrEditCollection(null); $event.stopPropagation()"
5656
style="outline: none; margin-left: 20px;"
5757
title="Add Collection"
58-
[disabled]="isBusy || !canCreate"
58+
[disabled]="isBusy || !canCreateCollections()"
5959
>
6060
<mat-icon class="mdi-24px self-center" fontIcon="mdi-plus-circle"></mat-icon>
6161
</button>
6262
<button
6363
mat-icon-button
6464
(click)="isBusy = true; jsonInput.click(); $event.stopPropagation()"
6565
title="Upload Collection"
66-
[disabled]="isBusy || !canCreate"
66+
[disabled]="isBusy || !canCreateCollections()"
6767
>
6868
<mat-icon class="mdi-24px" fontIcon="mdi-upload" alt="Upload"></mat-icon>
6969
</button>
@@ -84,22 +84,22 @@
8484
(click)="addOrEditCollection(collection); $event.stopPropagation()"
8585
style="outline: none;"
8686
title="Edit {{ collection.name }}"
87-
[disabled]="isBusy || !canEdit"
87+
[disabled]="isBusy || !canEditCollection(collection.id)"
8888
>
8989
<mat-icon class="mdi-18px self-center" fontIcon="mdi-square-edit-outline"></mat-icon>
9090
</button>
9191
<button
9292
mat-icon-button
9393
(click)="copyCollection(collection.id); $event.stopPropagation();"
94-
title="Copy {{ collection.description }}"
95-
[disabled]="isBusy || !canCreate"
94+
title="Copy {{ collection.name }}"
95+
[disabled]="isBusy || !canCreateCollections()"
9696
>
9797
<mat-icon class="mdi-18px" fontIcon="mdi-content-copy" alt="Copy"></mat-icon>
9898
</button>
9999
<button
100100
mat-icon-button
101101
(click)="downloadCollection(collection); $event.stopPropagation();"
102-
title="Download {{ collection.description }}"
102+
title="Download {{ collection.name }}"
103103
[disabled]="isBusy"
104104
>
105105
<mat-icon class="mdi-18px" fontIcon="mdi-download" alt="Download"></mat-icon>
@@ -109,7 +109,7 @@
109109
(click)="deleteCollection(collection); $event.stopPropagation()"
110110
style="outline: none;"
111111
title="Delete {{ collection.name }}"
112-
[disabled]="isBusy || !canEdit"
112+
[disabled]="isBusy || !canManageCollection(collection.id)"
113113
>
114114
<mat-icon class="mdi-18px self-center" fontIcon="mdi-trash-can"></mat-icon>
115115
</button>

src/app/components/admin/admin-collections/admin-collections.component.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2022 Carnegie Mellon University. All Rights Reserved.
22
// Released under a MIT (SEI)-style license. See LICENSE.md in the project root for license information.
33

4-
import { Component, Input, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';
4+
import { Component, OnDestroy, ViewChild, ElementRef } from '@angular/core';
55
import { UntypedFormControl } from '@angular/forms';
66
import { LegacyPageEvent as PageEvent } from '@angular/material/legacy-paginator';
77
import { Sort } from '@angular/material/sort';
@@ -23,9 +23,7 @@ import { PermissionDataService } from 'src/app/data/permission/permission-data.s
2323
templateUrl: './admin-collections.component.html',
2424
styleUrls: ['./admin-collections.component.scss'],
2525
})
26-
export class AdminCollectionsComponent implements OnInit, OnDestroy {
27-
@Input() canEdit: boolean;
28-
@Input() canCreate: boolean;
26+
export class AdminCollectionsComponent implements OnDestroy {
2927
pageSize = 10;
3028
pageIndex = 0;
3129
collectionList: Collection[] = [];
@@ -66,7 +64,9 @@ export class AdminCollectionsComponent implements OnInit, OnDestroy {
6664
this.editCollection = { ...collection};
6765
}
6866
});
69-
this.sortChanged(this.sort);
67+
this.applyFilter();
68+
console.log('loading collection permissions from admin-collections');
69+
this.permissionDataService.loadCollectionPermissions().subscribe();
7070
});
7171
this.collectionDataService.load();
7272
this.filterControl.valueChanges
@@ -81,15 +81,8 @@ export class AdminCollectionsComponent implements OnInit, OnDestroy {
8181
});
8282
}
8383

84-
ngOnInit() {
85-
this.loadInitialData();
86-
}
87-
88-
loadInitialData() {
89-
this.collectionQuery.selectAll().pipe(takeUntil(this.unsubscribe$)).subscribe(collections => {
90-
this.collectionList = Array.from(collections);
91-
this.applyFilter();
92-
});
84+
canCreateCollections(): boolean {
85+
return this.permissionDataService.hasPermission(SystemPermission.CreateCollections);
9386
}
9487

9588
addOrEditCollection(collection: Collection) {
@@ -126,6 +119,14 @@ export class AdminCollectionsComponent implements OnInit, OnDestroy {
126119
this.collectionDataService.setActive(collectionId);
127120
}
128121

122+
canEditCollection(collectionId: string): boolean {
123+
return this.permissionDataService.canEditCollection(collectionId);
124+
}
125+
126+
canManageCollection(collectionId: string): boolean {
127+
return this.permissionDataService.canManageCollection(collectionId);
128+
}
129+
129130
selectCollection(collection: Collection) {
130131
this.editCollection = { ...collection };
131132
this.originalCollection = { ...collection };
@@ -200,7 +201,8 @@ export class AdminCollectionsComponent implements OnInit, OnDestroy {
200201
}
201202

202203
copyCollection(id: string): void {
203-
this.collectionDataService.copy(id);
204+
this.permissionDataService.loadCollectionPermissions().subscribe();
205+
// this.collectionDataService.copy(id);
204206
}
205207

206208
downloadCollection(collection: Collection) {

src/app/components/admin/admin-container/admin-container.component.html

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ <h2 class="icon-text">Administration</h2>
3434
<mat-divider></mat-divider>
3535
</mat-list-item>
3636
<mat-list-item
37-
*ngIf="canViewCollections"
37+
*ngIf="canViewCollections || hasPermission(SystemPermission.CreateCollections)"
3838
[ngClass]="getSelectedClass(section.collections)"
3939
>
4040
<div class="showhand" id="wrapper" (click)="gotoSection(section.collections)">
@@ -53,7 +53,7 @@ <h2 class="icon-text">Administration</h2>
5353
</div>
5454
</mat-list-item>
5555
<mat-list-item
56-
*ngIf="canViewCollections"
56+
*ngIf="canViewCollections || hasPermission(SystemPermission.CreateCollections)"
5757
[ngClass]="getSelectedClass(section.cards)"
5858
>
5959
<div class="showhand" id="wrapper" (click)="gotoSection(section.cards)">
@@ -72,7 +72,7 @@ <h2 class="icon-text">Administration</h2>
7272
</div>
7373
</mat-list-item>
7474
<mat-list-item
75-
*ngIf="canViewCollections"
75+
*ngIf="canViewCollections || hasPermission(SystemPermission.CreateCollections)"
7676
[ngClass]="getSelectedClass(section.articles)"
7777
>
7878
<div class="showhand" id="wrapper" (click)="gotoSection(section.articles)">
@@ -91,7 +91,7 @@ <h2 class="icon-text">Administration</h2>
9191
</div>
9292
</mat-list-item>
9393
<mat-list-item
94-
*ngIf="canViewExhibits"
94+
*ngIf="canViewExhibits || hasPermission(SystemPermission.CreateExhibits)"
9595
[ngClass]="getSelectedClass(section.exhibits)"
9696
>
9797
<div class="showhand" id="wrapper" (click)="gotoSection(section.exhibits)">
@@ -110,7 +110,7 @@ <h2 class="icon-text">Administration</h2>
110110
</div>
111111
</mat-list-item>
112112
<mat-list-item
113-
*ngIf="permissions.includes(SystemPermission.ViewUsers)"
113+
*ngIf="hasPermission(SystemPermission.ViewUsers)"
114114
[ngClass]="getSelectedClass(section.users)"
115115
>
116116
<div class="showhand" id="wrapper" (click)="gotoSection(section.users)">
@@ -129,7 +129,7 @@ <h2 class="icon-text">Administration</h2>
129129
</div>
130130
</mat-list-item>
131131
<mat-list-item
132-
*ngIf="permissions.includes(SystemPermission.ViewRoles)"
132+
*ngIf="hasPermission(SystemPermission.ViewRoles)"
133133
[ngClass]="getSelectedClass(section.roles)"
134134
>
135135
<div class="showhand" id="wrapper" (click)="gotoSection(section.roles)">
@@ -147,7 +147,7 @@ <h2 class="icon-text">Administration</h2>
147147
</div>
148148
</mat-list-item>
149149
<mat-list-item
150-
*ngIf="permissions.includes(SystemPermission.ViewGroups)"
150+
*ngIf="hasPermission(SystemPermission.ViewGroups)"
151151
[ngClass]="getSelectedClass(section.groups)"
152152
>
153153
<div class="showhand" id="wrapper" (click)="gotoSection(section.groups)">
@@ -189,33 +189,28 @@ <h2 class="icon-text">Administration</h2>
189189
[topbarTextColor]="topbarTextColor"
190190
[imageFilePath]="topbarImage"
191191
></app-topbar>
192-
<span *ngIf="canViewCollections && displayedSection === section.collections">
193-
<app-admin-collections
194-
[canEdit]="canEditCollections"
195-
[canCreate]="canCreateCollections"
196-
></app-admin-collections>
192+
<span *ngIf="(canViewCollections || hasPermission(SystemPermission.CreateCollections)) && displayedSection === section.collections">
193+
<app-admin-collections></app-admin-collections>
197194
</span>
198-
<span *ngIf="canViewExhibits && displayedSection === section.exhibits">
195+
<span *ngIf="(canViewExhibits || hasPermission(SystemPermission.CreateExhibits)) && displayedSection === section.exhibits">
199196
<app-admin-exhibits
200197
[userList]="userList | async"
201-
[canEdit]="canEditExhibits"
202-
[canCreate]="canCreateExhibits"
203198
>
204199
</app-admin-exhibits>
205200
</span>
206-
<span *ngIf="canViewCollections && displayedSection === section.cards">
207-
<app-admin-cards [canEdit]="canEditCollections"></app-admin-cards>
201+
<span *ngIf="(canViewCollections || hasPermission(SystemPermission.CreateCollections)) && displayedSection === section.cards">
202+
<app-admin-cards></app-admin-cards>
208203
</span>
209-
<span *ngIf="canViewCollections && displayedSection === section.articles">
210-
<app-admin-articles [canEdit]="canEditCollections"></app-admin-articles>
204+
<span *ngIf="(canViewCollections || hasPermission(SystemPermission.CreateCollections)) && displayedSection === section.articles">
205+
<app-admin-articles></app-admin-articles>
211206
</span>
212-
<span *ngIf="permissions.includes(SystemPermission.ViewUsers) && displayedSection === section.users">
207+
<span *ngIf="hasPermission(SystemPermission.ViewUsers) && displayedSection === section.users">
213208
<app-admin-users></app-admin-users>
214209
</span>
215-
<span *ngIf="permissions.includes(SystemPermission.ViewRoles) && displayedSection === section.roles">
210+
<span *ngIf="hasPermission(SystemPermission.ViewRoles) && displayedSection === section.roles">
216211
<app-admin-roles></app-admin-roles>
217212
</span>
218-
<span *ngIf="permissions.includes(SystemPermission.ViewGroups) && displayedSection === section.groups">
213+
<span *ngIf="hasPermission(SystemPermission.ViewGroups) && displayedSection === section.groups">
219214
<app-admin-groups></app-admin-groups>
220215
</span>
221216
</mat-sidenav-content>

0 commit comments

Comments
 (0)