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