Skip to content

Commit

Permalink
PMM-12356 Fix role checking
Browse files Browse the repository at this point in the history
  • Loading branch information
matejkubinec committed Feb 25, 2025
1 parent 4bff8d1 commit abee1c9
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { FC, useCallback, useMemo, useState } from 'react';

import { AppEvents, UrlQueryMap } from '@grafana/data';
import { AppEvents, OrgRole, UrlQueryMap } from '@grafana/data';
import { config, locationService } from '@grafana/runtime';
import { useStyles2 } from '@grafana/ui';
import appEvents from 'app/core/app_events';
Expand Down Expand Up @@ -197,6 +197,7 @@ export const AllChecksTab: FC<GrafanaRouteComponentProps<{ category: string }>>
messagedataTestId="db-check-panel-settings-link"
featureName={mainChecksMessages.advisors}
featureSelector={featureSelector}
allowedRoles={[OrgRole.Admin, OrgRole.Editor]}
>
<ChecksInfoAlert />
<div className={styles.wrapper}>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';
import { Cell, Column, Row } from 'react-table';

import { OrgRole } from '@grafana/data';
import { locationService } from '@grafana/runtime';
import { useStyles2 } from '@grafana/ui';
import { Page } from 'app/core/components/Page/Page';
Expand Down Expand Up @@ -86,6 +87,7 @@ export const FailedChecksTab: FC = () => {
messagedataTestId="db-check-panel-settings-link"
featureName={mainChecksMessages.advisors}
featureSelector={featureSelector}
allowedRoles={[OrgRole.Admin, OrgRole.Editor]}
>
<ChecksInfoAlert />
<AlertsReloadContext.Provider value={{ fetchAlerts }}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import { format } from 'date-fns';
import React, { FC, useCallback, useEffect, useState } from 'react';
import { Column } from 'react-table';

import { OrgRole } from '@grafana/data';
import { config } from '@grafana/runtime';
import { Button, useStyles2 } from '@grafana/ui';
import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA';
import { Page } from 'app/core/components/Page/Page';
Expand All @@ -12,6 +14,7 @@ import { useCancelToken } from 'app/percona/shared/components/hooks/cancelToken.
import { getPerconaSettingFlag } from 'app/percona/shared/core/selectors';
import { isApiCancelError } from 'app/percona/shared/helpers/api';
import { logger } from 'app/percona/shared/helpers/logger';
import { isEditor, isPmmAdmin } from 'app/percona/shared/helpers/permissions';

import { useStoredTablePageSize } from '../../../shared/components/Elements/Table/Pagination';
import { Table } from '../../../shared/components/Elements/Table/Table';
Expand Down Expand Up @@ -124,13 +127,19 @@ export const AlertRuleTemplate: FC = () => {
<Page
navModel={navModel}
actions={
<Button size="md" fill="text" onClick={handleAddButton} data-testid="alert-rule-template-add-modal-button">
{Messages.alertRuleTemplate.addAction}
</Button>
isEditor(config.bootData.user) || isPmmAdmin(config.bootData.user) ? (
<Button size="md" fill="text" onClick={handleAddButton} data-testid="alert-rule-template-add-modal-button">
{Messages.alertRuleTemplate.addAction}
</Button>
) : undefined
}
>
<Page.Contents>
<FeatureLoader featureName={Messages.alerting} featureSelector={featureSelector}>
<FeatureLoader
featureName={Messages.alerting}
featureSelector={featureSelector}
allowedRoles={[OrgRole.Admin, OrgRole.Editor]}
>
<AddAlertRuleTemplateModal
isVisible={addModalVisible}
setVisible={setAddModalVisible}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { format } from 'date-fns';
import React, { FC, useCallback } from 'react';
import { Cell, Column, Row } from 'react-table';

import { OrgRole } from '@grafana/data';
import { config } from '@grafana/runtime';
import { Icon, LinkButton, useStyles2 } from '@grafana/ui';
import { Page } from 'app/core/components/Page/Page';
Expand Down Expand Up @@ -157,7 +158,11 @@ export const Alerts: FC = () => {
return (
<Page navModel={navModel}>
<Page.Contents>
<FeatureLoader featureName={Messages.alerting} featureSelector={featureSelector}>
<FeatureLoader
featureName={Messages.alerting}
featureSelector={featureSelector}
allowedRoles={[OrgRole.Admin, OrgRole.Editor, OrgRole.Viewer]}
>
<Table
totalItems={alertManagerAlerts.length}
data={alertManagerAlerts || []}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import React, { FC } from 'react';

import { config } from '@grafana/runtime';
import { useStyles } from '@grafana/ui';
import { getPerconaUser } from 'app/percona/shared/core/selectors';
import { useSelector } from 'app/types';
import { OrgRole } from 'app/types';

import { PermissionLoader } from '../PermissionLoader';

Expand All @@ -15,12 +15,12 @@ export const FeatureLoader: FC<FeatureLoaderProps> = ({
featureName = '',
featureSelector = () => true,
messagedataTestId = 'settings-link',
allowedRoles = [OrgRole.Admin],
children,
}) => {
const { isAuthorized } = useSelector(getPerconaUser);
const styles = useStyles(getStyles);

if (isAuthorized === false) {
if (config.bootData.user.orgRole === '' || !allowedRoles.includes(config.bootData.user.orgRole)) {
return (
<div data-testid="unauthorized" className={styles.unauthorized}>
{Messages.unauthorized}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { PropsWithChildren } from 'react';

import { StoreState } from 'app/types';
import { OrgRole, StoreState } from 'app/types';

export interface FeatureLoaderProps extends PropsWithChildren {
featureName?: string;
featureSelector?: (state: StoreState) => boolean;
messagedataTestId?: string;
allowedRoles?: OrgRole[];
}

0 comments on commit abee1c9

Please sign in to comment.