Browse Source

ref(policies): Restrict superusers to accept policies (#46932)

Priscila Oliveira 1 year ago
parent
commit
5165d8739f

+ 7 - 0
static/app/views/issueDetails/actions/index.tsx

@@ -49,6 +49,7 @@ import {DiscoverDatasets} from 'sentry/utils/discover/types';
 import {displayReprocessEventAction} from 'sentry/utils/displayReprocessEventAction';
 import {getAnalyticsDataForGroup} from 'sentry/utils/events';
 import {uniqueId} from 'sentry/utils/guid';
+import {isActiveSuperuser} from 'sentry/utils/isActiveSuperuser';
 import {getConfigForIssueType} from 'sentry/utils/issueTypeConfig';
 import withApi from 'sentry/utils/withApi';
 import {normalizeUrl} from 'sentry/utils/withDomainRequired';
@@ -367,6 +368,7 @@ class Actions extends Component<Props> {
     } = getConfigForIssueType(group).actions;
 
     const hasDeleteAccess = organization.access.includes('event:admin');
+    const activeSuperUser = isActiveSuperuser();
 
     const {dropdownItems, onIgnore} = getIgnoreActions({onUpdate: this.onUpdate});
     return (
@@ -408,6 +410,10 @@ class Actions extends Component<Props> {
             {
               key: 'suggested-fix',
               className: 'hidden-sm hidden-md hidden-lg',
+              disabled: activeSuperUser,
+              tooltip: activeSuperUser
+                ? t("Superusers can't consent to policies")
+                : undefined,
               label: (
                 <Tooltip
                   title={experimentalFeatureTooltipDesc}
@@ -517,6 +523,7 @@ class Actions extends Component<Props> {
               disabled={disabled}
               groupId={group.id}
               onClick={() => this.trackIssueAction('open_ai_suggested_fix')}
+              activeSuperUser={activeSuperUser}
             />
           </GuideAnchor>
         </Feature>

+ 8 - 2
static/app/views/issueDetails/openAIFixSuggestion/openAIFixSuggestionButton.tsx

@@ -10,6 +10,7 @@ import {normalizeUrl} from 'sentry/utils/withDomainRequired';
 import {experimentalFeatureTooltipDesc} from 'sentry/views/issueDetails/openAIFixSuggestion/utils';
 
 type Props = {
+  activeSuperUser: boolean;
   groupId: Group['id'];
   onClick: () => void;
   className?: string;
@@ -23,6 +24,7 @@ export function OpenAIFixSuggestionButton({
   size,
   onClick,
   groupId,
+  activeSuperUser,
 }: Props) {
   const organization = useOrganization();
   const router = useRouter();
@@ -45,10 +47,14 @@ export function OpenAIFixSuggestionButton({
   return (
     <ActionButton
       className={className}
-      disabled={disabled}
+      disabled={activeSuperUser || disabled}
+      title={
+        activeSuperUser
+          ? t("Superusers can't consent to policies")
+          : experimentalFeatureTooltipDesc
+      }
       size={size}
       onClick={handleShowAISuggestion}
-      title={experimentalFeatureTooltipDesc}
     >
       {t('Suggested Fix')}
       <FeatureBadge type="experimental" noTooltip />

+ 8 - 0
static/app/views/issueDetails/openAIFixSuggestion/openAIFixSuggestionPanel.tsx

@@ -14,6 +14,7 @@ import {IconChevron} from 'sentry/icons/iconChevron';
 import {t} from 'sentry/locale';
 import ConfigStore from 'sentry/stores/configStore';
 import {space} from 'sentry/styles/space';
+import {isActiveSuperuser} from 'sentry/utils/isActiveSuperuser';
 import marked from 'sentry/utils/marked';
 import {useApiQuery} from 'sentry/utils/queryClient';
 import useOrganization from 'sentry/utils/useOrganization';
@@ -117,7 +118,10 @@ export function OpenAIFixSuggestionPanel({eventID, projectSlug}: Props) {
       />
     );
   }
+
   if (error?.responseJSON?.restriction === 'individual_consent') {
+    const activeSuperUser = isActiveSuperuser();
+
     PolicyErrorState = (
       <EmptyMessage
         icon={<IconFlag size="xl" />}
@@ -141,6 +145,10 @@ export function OpenAIFixSuggestionPanel({eventID, projectSlug}: Props) {
                 setIndividualConsent(true);
                 dataRefetch();
               }}
+              disabled={activeSuperUser}
+              title={
+                activeSuperUser ? t("Superusers can't consent to policies") : undefined
+              }
             >
               {t('Confirm')}
             </Button>