Skip to content

Commit

Permalink
Plugins: Check for Grafana admin instead of Org admin (grafana#35000)
Browse files Browse the repository at this point in the history
* check for grafana admin where necessary

* fix
  • Loading branch information
wbrowne authored May 31, 2021
1 parent 51afde3 commit aba1801
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ import { gt, satisfies } from 'semver';

import { config } from '@grafana/runtime';
import { Button, HorizontalGroup, Icon, LinkButton, useStyles2 } from '@grafana/ui';
import { AppEvents, GrafanaTheme2, OrgRole } from '@grafana/data';
import { AppEvents, GrafanaTheme2 } from '@grafana/data';

import { Metadata, Plugin } from '../types';
import { hasRole } from '../helpers';
import { api } from '../api';

// This isn't exported in the sdk yet
// @ts-ignore
import appEvents from 'grafana/app/core/app_events';
import { isGrafanaAdmin } from '../helpers';

interface Props {
localPlugin?: Metadata;
Expand Down Expand Up @@ -76,7 +76,7 @@ export const InstallControls = ({ localPlugin, remotePlugin }: Props) => {

const isDevelopmentBuild = Boolean(localPlugin?.dev);
const isEnterprise = remotePlugin?.status === 'enterprise';
const hasPermission = hasRole(OrgRole.Admin);
const hasPermission = isGrafanaAdmin();

if (isEnterprise) {
return (
Expand All @@ -97,7 +97,7 @@ export const InstallControls = ({ localPlugin, remotePlugin }: Props) => {
<HorizontalGroup height="auto">
{shouldUpdate &&
(isExternallyManaged ? (
<LinkButton disabled={!hasPermission} href={externalManageLink} target="_blank" rel="noopener noreferrer">
<LinkButton href={externalManageLink} target="_blank" rel="noopener noreferrer">
{'Update via grafana.com'}
</LinkButton>
) : (
Expand All @@ -107,21 +107,17 @@ export const InstallControls = ({ localPlugin, remotePlugin }: Props) => {
))}

{isExternallyManaged ? (
<LinkButton
variant="destructive"
disabled={!hasPermission}
href={externalManageLink}
target="_blank"
rel="noopener noreferrer"
>
<LinkButton variant="destructive" href={externalManageLink} target="_blank" rel="noopener noreferrer">
{'Uninstall via grafana.com'}
</LinkButton>
) : (
<Button variant="destructive" disabled={loading || !hasPermission} onClick={onUninstall}>
{loading && !shouldUpdate ? 'Uninstalling' : 'Uninstall'}
</Button>
<>
<Button variant="destructive" disabled={loading || !hasPermission} onClick={onUninstall}>
{loading && !shouldUpdate ? 'Uninstalling' : 'Uninstall'}
</Button>
{!hasPermission && <div className={styles.message}>You need admin privileges to manage this plugin.</div>}
</>
)}
{!hasPermission && <div className={styles.message}>You need admin privileges to manage this plugin.</div>}
</HorizontalGroup>
);
}
Expand All @@ -138,15 +134,17 @@ export const InstallControls = ({ localPlugin, remotePlugin }: Props) => {
return (
<HorizontalGroup height="auto">
{isExternallyManaged ? (
<LinkButton disabled={!hasPermission} href={externalManageLink} target="_blank" rel="noopener noreferrer">
<LinkButton href={externalManageLink} target="_blank" rel="noopener noreferrer">
{'Install via grafana.com'}
</LinkButton>
) : (
<Button disabled={loading || !hasPermission} onClick={onInstall}>
{loading ? 'Installing' : 'Install'}
</Button>
<>
<Button disabled={loading || !hasPermission} onClick={onInstall}>
{loading ? 'Installing' : 'Install'}
</Button>
{!hasPermission && <div className={styles.message}>You need admin privileges to install this plugin.</div>}
</>
)}
{!hasPermission && <div className={styles.message}>You need admin privileges to install this plugin.</div>}
</HorizontalGroup>
);
};
Expand Down
19 changes: 2 additions & 17 deletions plugins-bundled/internal/plugin-admin-app/src/helpers.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,5 @@
import { OrgRole } from '@grafana/data';
import { config } from '@grafana/runtime';

export function hasRole(requiredRole: OrgRole): boolean {
const user = config.bootData.user;
switch (requiredRole) {
case OrgRole.Admin: {
return user.orgRole === OrgRole.Admin;
}
case OrgRole.Editor: {
return user.orgRole === OrgRole.Admin || user.orgRole === OrgRole.Editor;
}
case OrgRole.Viewer: {
return user.orgRole === OrgRole.Admin || user.orgRole === OrgRole.Editor || user.orgRole === OrgRole.Viewer;
}
default: {
return false;
}
}
export function isGrafanaAdmin(): boolean {
return config.bootData.user.isGrafanaAdmin;
}

0 comments on commit aba1801

Please sign in to comment.