From f908376802c2de13b8d26a248e2b156517030188 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Mon, 22 Apr 2019 13:10:23 +0300 Subject: [PATCH] Problems panel: hide acknowledge button for read-only users, fix #722 --- .../AlertList/AlertAcknowledges.tsx | 12 +++++++----- .../components/AlertList/AlertCard.tsx | 19 ++++++++++++++----- .../components/Problems/ProblemDetails.tsx | 14 ++++++++------ src/panel-triggers/triggers_panel_ctrl.js | 11 +++++++++++ src/panel-triggers/types.ts | 1 + 5 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/panel-triggers/components/AlertList/AlertAcknowledges.tsx b/src/panel-triggers/components/AlertList/AlertAcknowledges.tsx index 378c44f..8ddf791 100644 --- a/src/panel-triggers/components/AlertList/AlertAcknowledges.tsx +++ b/src/panel-triggers/components/AlertList/AlertAcknowledges.tsx @@ -36,11 +36,13 @@ export default class AlertAcknowledges extends PureComponent -
- -
+ {problem.showAckButton && +
+ +
+ } ); } diff --git a/src/panel-triggers/components/AlertList/AlertCard.tsx b/src/panel-triggers/components/AlertList/AlertCard.tsx index d0977ad..9b08935 100644 --- a/src/panel-triggers/components/AlertList/AlertCard.tsx +++ b/src/panel-triggers/components/AlertList/AlertCard.tsx @@ -44,7 +44,10 @@ export default class AlertCard extends PureComponent { - this.setState({ showAckDialog: true }); + const problem = this.props.problem; + if (problem.showAckButton) { + this.setState({ showAckDialog: true }); + } } closeAckDialog = () => { @@ -258,14 +261,20 @@ class AlertAcknowledgesButton extends PureComponent - : + + ); + } else if (problem.showAckButton) { + content = ( - ); + ); + } + return content; } } diff --git a/src/panel-triggers/components/Problems/ProblemDetails.tsx b/src/panel-triggers/components/Problems/ProblemDetails.tsx index 38fc515..67154b1 100644 --- a/src/panel-triggers/components/Problems/ProblemDetails.tsx +++ b/src/panel-triggers/components/Problems/ProblemDetails.tsx @@ -110,12 +110,14 @@ export default class ProblemDetails extends PureComponent} -
- -
+ {problem.showAckButton && +
+ +
+ } {problem.comments &&
diff --git a/src/panel-triggers/triggers_panel_ctrl.js b/src/panel-triggers/triggers_panel_ctrl.js index fc8135a..d0d0ab8 100644 --- a/src/panel-triggers/triggers_panel_ctrl.js +++ b/src/panel-triggers/triggers_panel_ctrl.js @@ -234,9 +234,11 @@ export class TriggerPanelCtrl extends PanelCtrl { getTriggers() { const timeFrom = Math.ceil(dateMath.parse(this.range.from) / 1000); const timeTo = Math.ceil(dateMath.parse(this.range.to) / 1000); + const userIsEditor = this.contextSrv.isEditor || this.contextSrv.isGrafanaAdmin; let promises = _.map(this.panel.datasources, (ds) => { let proxies; + let showAckButton = true; return this.datasourceSrv.get(ds) .then(datasource => { const zabbix = datasource.zabbix; @@ -244,6 +246,7 @@ export class TriggerPanelCtrl extends PanelCtrl { const triggerFilter = this.panel.targets[ds]; const showProxy = this.panel.hostProxy; const getProxiesPromise = showProxy ? zabbix.getProxies() : () => []; + showAckButton = !datasource.disableReadOnlyUsersAck || userIsEditor; // Replace template variables const groupFilter = datasource.replaceTemplateVars(triggerFilter.group.filter); @@ -280,6 +283,7 @@ export class TriggerPanelCtrl extends PanelCtrl { return triggers; }) .then(triggers => this.setMaintenanceStatus(triggers)) + .then(triggers => this.setAckButtonStatus(triggers, showAckButton)) .then(triggers => this.filterTriggersPre(triggers, ds)) .then(triggers => this.addTriggerDataSource(triggers, ds)) .then(triggers => this.addTriggerHostProxy(triggers, proxies)); @@ -395,6 +399,13 @@ export class TriggerPanelCtrl extends PanelCtrl { return triggers; } + setAckButtonStatus(triggers, showAckButton) { + _.each(triggers, (trigger) => { + trigger.showAckButton = showAckButton; + }); + return triggers; + } + addTriggerDataSource(triggers, ds) { _.each(triggers, (trigger) => { trigger.datasource = ds; diff --git a/src/panel-triggers/types.ts b/src/panel-triggers/types.ts index 4025aea..477d8fb 100644 --- a/src/panel-triggers/types.ts +++ b/src/panel-triggers/types.ts @@ -75,6 +75,7 @@ export type TriggerColor = string; export interface ZBXTrigger { acknowledges?: ZBXAcknowledge[]; + showAckButton?: boolean; alerts?: ZBXAlert[]; age?: string; color?: TriggerColor;