Disable server stats buttons when user doesn't have permissions to access those links (#43603)

This commit is contained in:
Ezequiel Victorero 2022-01-13 10:42:09 -03:00 committed by GitHub
parent f999910dc6
commit 13223140ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 7 deletions

View File

@ -41,5 +41,8 @@ describe('ServerStats', () => {
expect(screen.getByText('Playlists')).toBeInTheDocument();
expect(screen.getByText('Snapshots')).toBeInTheDocument();
expect(screen.getByRole('link', { name: 'Manage dashboards' })).toBeInTheDocument();
expect(screen.getByRole('link', { name: 'Manage data sources' })).toBeInTheDocument();
expect(screen.getByRole('link', { name: 'Alerts' })).toBeInTheDocument();
expect(screen.getByRole('link', { name: 'Manage users' })).toBeInTheDocument();
});
});

View File

@ -14,6 +14,9 @@ export const ServerStats = () => {
const [isLoading, setIsLoading] = useState(false);
const styles = useStyles2(getStyles);
const hasAccessToDataSources = contextSrv.hasAccess(AccessControlAction.DataSourcesRead, contextSrv.isGrafanaAdmin);
const hasAccessToAdminUsers = contextSrv.hasAccess(AccessControlAction.UsersRead, contextSrv.isGrafanaAdmin);
useEffect(() => {
if (contextSrv.hasAccess(AccessControlAction.ActionServerStatsRead, contextSrv.isGrafanaAdmin)) {
setIsLoading(true);
@ -55,9 +58,11 @@ export const ServerStats = () => {
<StatCard
content={[{ name: 'Data sources', value: stats.datasources }]}
footer={
<LinkButton href={'/datasources'} variant={'secondary'}>
Manage data sources
</LinkButton>
hasAccessToDataSources && (
<LinkButton href={'/datasources'} variant={'secondary'}>
Manage data sources
</LinkButton>
)
}
/>
<StatCard
@ -77,9 +82,11 @@ export const ServerStats = () => {
{ name: 'Active sessions', value: stats.activeSessions },
]}
footer={
<LinkButton href={'/admin/users'} variant={'secondary'}>
Manage users
</LinkButton>
hasAccessToAdminUsers && (
<LinkButton href={'/admin/users'} variant={'secondary'}>
Manage users
</LinkButton>
)
}
/>
</div>
@ -133,7 +140,7 @@ const getStyles = (theme: GrafanaTheme2) => {
type StatCardProps = {
content: Array<Record<string, number | string>>;
footer?: JSX.Element;
footer?: JSX.Element | boolean;
};
const StatCard = ({ content, footer }: StatCardProps) => {