<div class="modal-footer">
<div class="button-group text-right">
- <cd-submit-button (submitAction)="submitAction()"
+ <cd-submit-button *ngIf="permissions.osd.update"
+ (submitAction)="submitAction()"
[form]="osdFlagsForm"
i18n>Submit</cd-submit-button>
<cd-back-button [back]="bsModalRef.hide"
import { OsdService } from '../../../../shared/api/osd.service';
import { NotificationType } from '../../../../shared/enum/notification-type.enum';
+import { Permissions } from '../../../../shared/models/permissions';
+import { AuthStorageService } from '../../../../shared/services/auth-storage.service';
import { NotificationService } from '../../../../shared/services/notification.service';
@Component({
styleUrls: ['./osd-flags-modal.component.scss']
})
export class OsdFlagsModalComponent implements OnInit {
+ permissions: Permissions;
+
osdFlagsForm = new FormGroup({});
allFlags = {
constructor(
public bsModalRef: BsModalRef,
+ private authStorageService: AuthStorageService,
private osdService: OsdService,
private notificationService: NotificationService,
private i18n: I18n
- ) {}
+ ) {
+ this.permissions = this.authStorageService.getPermissions();
+ }
ngOnInit() {
this.osdService.getFlags().subscribe((res: string[]) => {
</cd-table-actions>
<div class="btn-group"
- dropdown>
+ dropdown
+ *ngIf="advancedTableActions.length > 0">
<button type="button"
class="btn btn-sm btn-default btn-label tc_configureCluster"
- (click)="configureClusterAction()">
- <i class="fa fa-fw fa-cog"
- aria-hidden="true">
- </i>
- <ng-container i18n>Set Cluster-wide Flags</ng-container>
+ (click)="advancedTableActions[0].click()">
+ <i class="fa fa-fw {{ advancedTableActions[0].icon }}"></i><span>{{ advancedTableActions[0].name }}</span>
</button>
<button type="button"
dropdownToggle
- class="btn btn-sm btn-default dropdown-toggle dropdown-toggle-split">
+ class="btn btn-sm btn-default dropdown-toggle dropdown-toggle-split"
+ *ngIf="advancedTableActions.length > 1">
<span class="caret caret-black"></span>
</button>
<ul *dropdownMenu
class="dropdown-menu"
role="menu">
- <ng-container *ngFor="let action of generalTableActions">
+ <ng-container *ngFor="let action of advancedTableActions | slice:1">
<li role="menuitem">
<a class="dropdown-item"
(click)="action.click()">
tableActions: CdTableAction[];
bsModalRef: BsModalRef;
columns: CdTableColumn[];
- generalTableActions: any[];
+ advancedTableActions: any[];
osds = [];
selection = new CdTableSelection();
icon: 'fa-remove'
}
];
- this.generalTableActions = [
+ this.advancedTableActions = [
{
- name: this.i18n('Set Cluster-wide Recovery Priority'),
+ name: this.i18n('Cluster-wide Flags'),
+ icon: 'fa-flag',
+ click: () => this.configureFlagsAction(),
+ permission: this.permissions.osd.read
+ },
+ {
+ name: this.i18n('Cluster-wide Recovery Priority'),
icon: 'fa-cog',
- click: () => this.configureQosParamsAction()
+ click: () => this.configureQosParamsAction(),
+ permission: this.permissions.configOpt.read
},
{
- name: this.i18n('PG scrub configuration'),
+ name: this.i18n('PG scrub'),
icon: 'fa-stethoscope',
- click: () => this.configurePgScrubAction()
+ click: () => this.configurePgScrubAction(),
+ permission: this.permissions.configOpt.read
}
];
}
cellTransformation: CellTemplate.perSecond
}
];
+
+ this.removeActionsWithNoPermissions();
}
get hasOsdSelected() {
this.bsModalRef = this.modalService.show(OsdScrubModalComponent, { initialState });
}
- configureClusterAction() {
+ configureFlagsAction() {
this.bsModalRef = this.modalService.show(OsdFlagsModalComponent, {});
}
configurePgScrubAction() {
this.bsModalRef = this.modalService.show(OsdPgScrubModalComponent, { class: 'modal-lg' });
}
+
+ /**
+ * Removes all actions from 'advancedTableActions' that need a permission the user doesn't have.
+ */
+ private removeActionsWithNoPermissions() {
+ if (!this.permissions) {
+ this.advancedTableActions = [];
+ return;
+ }
+
+ this.advancedTableActions = this.advancedTableActions.filter((action) => action.permission);
+ }
}
</div>
<div class="modal-footer">
<div class="button-group text-right">
- <cd-submit-button (submitAction)="submitAction()"
+ <cd-submit-button *ngIf="permissions.configOpt.update"
+ (submitAction)="submitAction()"
[form]="osdPgScrubForm"
i18n="form action button|Example: Create Pool@@formActionButton"
type="button">{{ action | titlecase }} {{ resource | upperFirst }}</cd-submit-button>
import { ActionLabelsI18n } from '../../../../shared/constants/app.constants';
import { NotificationType } from '../../../../shared/enum/notification-type.enum';
import { CdFormGroup } from '../../../../shared/forms/cd-form-group';
+import { Permissions } from '../../../../shared/models/permissions';
+import { AuthStorageService } from '../../../../shared/services/auth-storage.service';
import { NotificationService } from '../../../../shared/services/notification.service';
import { OsdPgScrubModalOptions } from './osd-pg-scrub-modal.options';
osdPgScrubForm: CdFormGroup;
action: string;
resource: string;
+ permissions: Permissions;
@ViewChild('basicOptionsValues')
basicOptionsValues: ConfigOptionComponent;
constructor(
public bsModalRef: BsModalRef,
+ private authStorageService: AuthStorageService,
private notificationService: NotificationService,
private i18n: I18n,
public actionLabels: ActionLabelsI18n
this.osdPgScrubForm = new CdFormGroup({});
this.resource = this.i18n('PG scrub options');
this.action = this.actionLabels.EDIT;
+ this.permissions = this.authStorageService.getPermissions();
}
submitAction() {
</div>
<div class="modal-footer">
<div class="button-group text-right">
- <cd-submit-button (submitAction)="submitAction()"
+ <cd-submit-button *ngIf="permissions.configOpt.update"
+ (submitAction)="submitAction()"
[form]="osdRecvSpeedForm"
i18n>Submit</cd-submit-button>
<cd-back-button [back]="bsModalRef.hide"
import { ConfigOptionTypes } from '../../../../shared/components/config-option/config-option.types';
import { NotificationType } from '../../../../shared/enum/notification-type.enum';
import { CdFormGroup } from '../../../../shared/forms/cd-form-group';
+import { Permissions } from '../../../../shared/models/permissions';
+import { AuthStorageService } from '../../../../shared/services/auth-storage.service';
import { NotificationService } from '../../../../shared/services/notification.service';
@Component({
})
export class OsdRecvSpeedModalComponent implements OnInit {
osdRecvSpeedForm: CdFormGroup;
+ permissions: Permissions;
+
priorities = [];
priorityAttrs = {};
constructor(
public bsModalRef: BsModalRef,
+ private authStorageService: AuthStorageService,
private configService: ConfigurationService,
private notificationService: NotificationService,
private i18n: I18n,
private osdService: OsdService
) {
+ this.permissions = this.authStorageService.getPermissions();
this.priorities = this.osdService.osdRecvSpeedModalPriorities.KNOWN_PRIORITIES;
this.osdRecvSpeedForm = new CdFormGroup({
priority: new FormControl(null, { validators: [Validators.required] }),