Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(visibility of menu entries): Utilise proper editing permissions for enabling/disabling editing menu items #1129

Original file line number Diff line number Diff line change
Expand Up @@ -52,23 +52,28 @@ <h3 class="label mat-headline-6">
<!-- permission info: display full info in case of system or project admin; otherwise display only user's permissions -->
<app-permission-info *ngIf="adminPermissions" [hasPermissions]="resource.res.hasPermissions" [userHasPermission]="resource.res.userHasPermission"></app-permission-info>
<app-permission-info *ngIf="!adminPermissions" [userHasPermission]="resource.res.userHasPermission"></app-permission-info>

<!-- more menu with: delete, erase resource -->
<button color="primary" *ngIf="editPermissions && project?.status" mat-icon-button class="more-menu" matTooltip="More"
<button color="primary" *ngIf="userCanEdit && project?.status" mat-icon-button class="more-menu" matTooltip="More"
matTooltipPosition="above" [matMenuTriggerFor]="more" [disabled]="deletedResource">
<mat-icon>more_vert</mat-icon>
</button>
<mat-menu #more="matMenu" class="res-more-menu">
<button mat-menu-item matTooltip="Edit the label of this resource" matTooltipPosition="above"
<button
[disabled]="!userCanEdit"
mat-menu-item matTooltip="Edit the label of this resource"
matTooltipPosition="above"
(click)="openDialog('edit')">
<mat-icon>edit</mat-icon>
Edit label
</button>
<button *ngIf="deleteButtonIsVisible" mat-menu-item matTooltip="Move resource to trash bin." matTooltipPosition="above"
<button
[disabled]="!userCanDelete"
mat-menu-item
matTooltip="Move resource to trash bin."
matTooltipPosition="above"
(click)="openDialog('delete')">
<mat-icon>delete</mat-icon>
Delete resource
<!-- TODO: or in case of already deleted resource: re-activate resource -->
</button>
<button *ngIf="adminPermissions" mat-menu-item matTooltip="Erase resource forever. This cannot be undone."
matTooltipPosition="above" (click)="openDialog('erase')">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,7 @@ describe('PropertiesComponent', () => {

expect(testHostComponent).toBeTruthy();

testHostComponent.propertiesComponent.addButtonIsVisible = true;
testHostComponent.propertiesComponent.userCanEdit = true;
testHostComponent.propertiesComponent.addValueFormIsVisible = false;
testHostFixture.detectChanges();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
OnChanges,
OnDestroy,
OnInit,
Output,
Output
} from '@angular/core';
import { MatDialog, MatDialogConfig } from '@angular/material/dialog';
import { PageEvent } from '@angular/material/paginator';
Expand Down Expand Up @@ -74,7 +74,7 @@ export interface PropertyInfoValues {
@Component({
selector: 'app-properties',
templateUrl: './properties.component.html',
styleUrls: ['./properties.component.scss'],
styleUrls: ['./properties.component.scss']
})
export class PropertiesComponent implements OnInit, OnChanges, OnDestroy {
/**
Expand All @@ -94,11 +94,6 @@ export class PropertiesComponent implements OnInit, OnChanges, OnDestroy {
*/
@Input() adminPermissions = false;

/**
* is the logged-in user project member?
*/
@Input() editPermissions = false;

/**
* in case properties belongs to an annotation (e.g. region in still images)
* in this case we don't have to display the isRegionOf property
Expand Down Expand Up @@ -142,8 +137,8 @@ export class PropertiesComponent implements OnInit, OnChanges, OnDestroy {

deletedResource = false;

deleteButtonIsVisible: boolean;
addButtonIsVisible: boolean; // used to toggle add value button
userCanDelete: boolean;
userCanEdit: boolean;
addValueFormIsVisible: boolean; // used to toggle add value form field
propID: string; // used in template to show only the add value form of the corresponding value

Expand Down Expand Up @@ -202,11 +197,10 @@ export class PropertiesComponent implements OnInit, OnChanges, OnDestroy {
this.lastModificationDate = this.resource.res.lastModificationDate;

// if user has modify permissions, set addButtonIsVisible to true so the user see's the add button
this.addButtonIsVisible =
allPermissions.indexOf(PermissionUtil.Permissions.M) !== -1;
this.userCanEdit = allPermissions.indexOf(PermissionUtil.Permissions.M) !== -1;

// if user has delete permissions, set deleteButtonIsVisible to true so the user see's the delete button
this.deleteButtonIsVisible =
this.userCanDelete =
allPermissions.indexOf(PermissionUtil.Permissions.D) !== -1;
}

Expand Down Expand Up @@ -472,7 +466,6 @@ export class PropertiesComponent implements OnInit, OnChanges, OnDestroy {
*/
hideAddValueForm() {
this.addValueFormIsVisible = false;
this.addButtonIsVisible = true;
this.propID = undefined;
}

Expand Down Expand Up @@ -504,7 +497,7 @@ export class PropertiesComponent implements OnInit, OnChanges, OnDestroy {
return (
isAllowed &&
this.propID !== prop.propDef.id &&
this.addButtonIsVisible
this.userCanEdit
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@
[resource]="resource"
[displayProjectInfo]="true"
[adminPermissions]="adminPermissions"
[editPermissions]="editPermissions"
[valueUuidToHighlight]="valueUuid">
</app-properties>
</mat-tab>
Expand All @@ -85,7 +84,6 @@
[resource]="incomingResource"
[displayProjectInfo]="false"
[adminPermissions]="adminPermissions"
[editPermissions]="editPermissions"
[valueUuidToHighlight]="valueUuid">
</app-properties>
</mat-tab>
Expand All @@ -107,7 +105,6 @@
[displayProjectInfo]="false"
[isAnnotation]="true"
[adminPermissions]="adminPermissions"
[editPermissions]="editPermissions"
[valueUuidToHighlight]="valueUuid"
(regionChanged)="updateRegion()">
</app-properties>
Expand All @@ -117,7 +114,7 @@
</mat-tab-group>
<ng-template #deletedResource>
<app-properties *ngIf="resource.res" [resource]="resource" [displayProjectInfo]="true"
[adminPermissions]="adminPermissions" [editPermissions]="editPermissions" [valueUuidToHighlight]="valueUuid">
[adminPermissions]="adminPermissions" [valueUuidToHighlight]="valueUuid">
</app-properties>
</ng-template>
</div>
Expand Down
16 changes: 5 additions & 11 deletions apps/dsp-app/src/app/workspace/resource/resource.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@ import {
Input,
OnChanges,
OnDestroy,
SimpleChange,
ViewChild,
} from '@angular/core';
import { MatTabChangeEvent } from '@angular/material/tabs';
import { Title } from '@angular/platform-browser';
import {
ActivatedRoute,
NavigationEnd,
NavigationError,
Router,
} from '@angular/router';
Expand Down Expand Up @@ -124,7 +122,6 @@ export class ResourceComponent implements OnChanges, OnDestroy {
// permissions of logged-in user
session: Session;
adminPermissions = false;
editPermissions = false;

navigationSubscription: Subscription;

Expand Down Expand Up @@ -251,13 +248,10 @@ export class ResourceComponent implements OnChanges, OnDestroy {
this.collectRepresentationsAndAnnotations(this.incomingResource);
}

setPermissionsOnResource(project: string) {
// get information about the logged-in user, if one is logged-in
if (this._session.getSession()) {
this.session = this._session.getSession();
// is the logged-in user project member?
// --> TODO: as soon as we know how to handle the permissions, set this value the correct way
this.editPermissions = true;
setAdminPermissionsOnResource(project: string) {
const session = this._session.getSession();
if (session) {
this.session = session;
// is the logged-in user system admin or project admin?
this.adminPermissions = this.session.user.sysAdmin
? this.session.user.sysAdmin
Expand Down Expand Up @@ -302,7 +296,7 @@ export class ResourceComponent implements OnChanges, OnDestroy {
} else {
this.renderAsMainResource(resource);
}
this.setPermissionsOnResource(resource.res.attachedToProject);
this.setAdminPermissionsOnResource(resource.res.attachedToProject);
}

renderAsMainResource(resource: DspResource) {
Expand Down