Prevent drag and final versions without perms
Fixes an issue where users without manage rights were able to use the drag and drop feature of the list of speakers. Also hides "modified final version" prints without sufficient permissions. Alters OSPerms to support "and" operators, so "perm" and "other condition" is now possible
This commit is contained in:
parent
83ff758977
commit
985fe9cc8b
@ -1,9 +1,9 @@
|
|||||||
<div cdkDropList class="os-card" (cdkDropListDropped)="drop($event)">
|
<div cdkDropList class="os-card" [cdkDropListDisabled]="!enable" (cdkDropListDropped)="drop($event)">
|
||||||
<div class="box line" *ngIf="!array.length">
|
<div class="box line" *ngIf="!array.length">
|
||||||
<span translate>No data</span>
|
<span translate>No data</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="box line" *ngFor="let item of array; let i = index" cdkDrag>
|
<div class="box line" *ngFor="let item of array; let i = index" cdkDrag>
|
||||||
<div class="section-one" cdkDragHandle>
|
<div class="section-one" cdkDragHandle *ngIf="enable">
|
||||||
<mat-icon>drag_indicator</mat-icon>
|
<mat-icon>drag_indicator</mat-icon>
|
||||||
</div>
|
</div>
|
||||||
<div class="section-two">
|
<div class="section-two">
|
||||||
|
@ -59,6 +59,12 @@ export class SortingListComponent implements OnInit, OnDestroy {
|
|||||||
@Input()
|
@Input()
|
||||||
public count = false;
|
public count = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be set to false to disable drag n drop
|
||||||
|
*/
|
||||||
|
@Input()
|
||||||
|
public enable = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Input List Values
|
* The Input List Values
|
||||||
*
|
*
|
||||||
|
@ -47,6 +47,12 @@ export class PermsDirective implements OnInit, OnDestroy {
|
|||||||
*/
|
*/
|
||||||
private complement: boolean;
|
private complement: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a true-false-condition additional to osPerms
|
||||||
|
* `*osPerms="'motions.can_manage';and:isRecoMode(ChangeRecoMode.Final)"`
|
||||||
|
*/
|
||||||
|
private and = true;
|
||||||
|
|
||||||
private operatorSubscription: Subscription | null;
|
private operatorSubscription: Subscription | null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -110,6 +116,16 @@ export class PermsDirective implements OnInit, OnDestroy {
|
|||||||
this.updateView();
|
this.updateView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comes from the view.
|
||||||
|
* `;and:` turns into osPermsAnd during runtime.
|
||||||
|
*/
|
||||||
|
@Input('osPermsAnd')
|
||||||
|
public set osPermsAnd(value: boolean) {
|
||||||
|
this.and = value;
|
||||||
|
this.updateView();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows or hides certain content in the view.
|
* Shows or hides certain content in the view.
|
||||||
*/
|
*/
|
||||||
@ -133,7 +149,10 @@ export class PermsDirective implements OnInit, OnDestroy {
|
|||||||
* Returns true if the users permissions fit.
|
* Returns true if the users permissions fit.
|
||||||
*/
|
*/
|
||||||
private checkPermissions(): boolean {
|
private checkPermissions(): boolean {
|
||||||
const hasPerms = this.permissions.length === 0 || this.operator.hasPerms(...this.permissions);
|
const hasPerms = this.and
|
||||||
|
? this.permissions.length === 0 || this.operator.hasPerms(...this.permissions)
|
||||||
|
: false;
|
||||||
|
|
||||||
if (this.complement) {
|
if (this.complement) {
|
||||||
return !hasPerms;
|
return !hasPerms;
|
||||||
} else {
|
} else {
|
||||||
|
@ -60,7 +60,13 @@
|
|||||||
<!-- Waiting speakers -->
|
<!-- Waiting speakers -->
|
||||||
<div>
|
<div>
|
||||||
<div class="waiting-list" *ngIf="speakers && speakers.length > 0">
|
<div class="waiting-list" *ngIf="speakers && speakers.length > 0">
|
||||||
<os-sorting-list [input]="speakers" [live]="true" [count]="true" (sortEvent)="onSortingChange($event)">
|
<os-sorting-list
|
||||||
|
[input]="speakers"
|
||||||
|
[live]="true"
|
||||||
|
[count]="true"
|
||||||
|
[enable]="opCanManage()"
|
||||||
|
(sortEvent)="onSortingChange($event)"
|
||||||
|
>
|
||||||
<!-- implicit item references into the component using ng-template slot -->
|
<!-- implicit item references into the component using ng-template slot -->
|
||||||
<ng-template let-item>
|
<ng-template let-item>
|
||||||
<span *osPerms="'agenda.can_manage_list_of_speakers'">
|
<span *osPerms="'agenda.can_manage_list_of_speakers'">
|
||||||
|
@ -176,6 +176,10 @@ export class ListOfSpeakersComponent extends BaseViewComponent implements OnInit
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public opCanManage(): boolean {
|
||||||
|
return this.op.hasPerms('agenda.can_manage_list_of_speakers');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check the URL to determine a current list of Speakers
|
* Check the URL to determine a current list of Speakers
|
||||||
*/
|
*/
|
||||||
|
@ -495,7 +495,7 @@
|
|||||||
type="button"
|
type="button"
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
matTooltip="{{ 'Create final print template' | translate }}"
|
matTooltip="{{ 'Create final print template' | translate }}"
|
||||||
*ngIf="isRecoMode(ChangeRecoMode.Final)"
|
*osPerms="'motions.can_manage';and:isRecoMode(ChangeRecoMode.Final)"
|
||||||
(click)="createModifiedFinalVersion()"
|
(click)="createModifiedFinalVersion()"
|
||||||
>
|
>
|
||||||
<mat-icon>description</mat-icon>
|
<mat-icon>description</mat-icon>
|
||||||
@ -878,7 +878,7 @@
|
|||||||
<button
|
<button
|
||||||
mat-menu-item
|
mat-menu-item
|
||||||
translate
|
translate
|
||||||
*ngIf="motion?.modified_final_version"
|
*osPerms="'motions.can_manage';and:isRecoMode(ChangeRecoMode.Final)"
|
||||||
(click)="setChangeRecoMode(ChangeRecoMode.ModifiedFinal)"
|
(click)="setChangeRecoMode(ChangeRecoMode.ModifiedFinal)"
|
||||||
[ngClass]="{ selected: motion?.crMode === ChangeRecoMode.ModifiedFinal }"
|
[ngClass]="{ selected: motion?.crMode === ChangeRecoMode.ModifiedFinal }"
|
||||||
>
|
>
|
||||||
|
Loading…
Reference in New Issue
Block a user