Parcourir la source

hide row actions for viewers

closes #11112
bergquist il y a 7 ans
Parent
commit
d3b23b01d8

+ 11 - 8
public/app/features/dashboard/dashgrid/DashboardRow.tsx

@@ -4,6 +4,7 @@ import { PanelModel } from '../panel_model';
 import { PanelContainer } from './PanelContainer';
 import templateSrv from 'app/features/templating/template_srv';
 import appEvents from 'app/core/app_events';
+import config from 'app/core/config';
 
 export interface DashboardRowProps {
   panel: PanelModel;
@@ -94,14 +95,16 @@ export class DashboardRow extends React.Component<DashboardRowProps, any> {
           {title}
           <span className="dashboard-row__panel_count">({hiddenPanels} hidden panels)</span>
         </a>
-        <div className="dashboard-row__actions">
-          <a className="pointer" onClick={this.openSettings}>
-            <i className="fa fa-cog" />
-          </a>
-          <a className="pointer" onClick={this.delete}>
-            <i className="fa fa-trash" />
-          </a>
-        </div>
+        {config.bootData.user.orgRole !== 'Viewer' && (
+          <div className="dashboard-row__actions">
+            <a className="pointer" onClick={this.openSettings}>
+              <i className="fa fa-cog" />
+            </a>
+            <a className="pointer" onClick={this.delete}>
+              <i className="fa fa-trash" />
+            </a>
+          </div>
+        )}
         <div className="dashboard-row__drag grid-drag-handle" />
       </div>
     );

+ 20 - 3
public/app/features/dashboard/specs/DashboardRow.jest.tsx

@@ -2,19 +2,26 @@ import React from 'react';
 import { shallow } from 'enzyme';
 import { DashboardRow } from '../dashgrid/DashboardRow';
 import { PanelModel } from '../panel_model';
+import config from '../../../core/config';
 
 describe('DashboardRow', () => {
   let wrapper, panel, getPanelContainer, dashboardMock;
 
   beforeEach(() => {
-    dashboardMock = {toggleRow: jest.fn()};
+    dashboardMock = { toggleRow: jest.fn() };
+
+    config.bootData = {
+      user: {
+        orgRole: 'Admin',
+      },
+    };
 
     getPanelContainer = jest.fn().mockReturnValue({
       getDashboard: jest.fn().mockReturnValue(dashboardMock),
-      getPanelLoader: jest.fn()
+      getPanelLoader: jest.fn(),
     });
 
-    panel = new PanelModel({collapsed: false});
+    panel = new PanelModel({ collapsed: false });
     wrapper = shallow(<DashboardRow panel={panel} getPanelContainer={getPanelContainer} />);
   });
 
@@ -30,4 +37,14 @@ describe('DashboardRow', () => {
     expect(dashboardMock.toggleRow.mock.calls).toHaveLength(1);
   });
 
+  it('should have two actions as admin', () => {
+    expect(wrapper.find('.dashboard-row__actions .pointer')).toHaveLength(2);
+  });
+
+  it('should have zero actions as viewer', () => {
+    config.bootData.user.orgRole = 'Viewer';
+    panel = new PanelModel({ collapsed: false });
+    wrapper = shallow(<DashboardRow panel={panel} getPanelContainer={getPanelContainer} />);
+    expect(wrapper.find('.dashboard-row__actions .pointer')).toHaveLength(0);
+  });
 });