Skip to content

Commit

Permalink
[Fleet] Disable button in logstash output based on correct privileges (
Browse files Browse the repository at this point in the history
…elastic#195210)

Fixes elastic#191951

## Summary
Disable button in logstash output based on correct privileges.

### Testing 
- Enable feature flag `subfeaturePrivileges`
- Follow testing steps in above ticket
The button "view steps" in logstash output should be disabled if role
doesn'thave `fleet.allSettings` privileges

![Screenshot 2024-10-07 at 12 03
25](https://github.com/user-attachments/assets/4933fa97-612c-4ddf-abcb-9838b110df09)

![Screenshot 2024-10-07 at 14 48
45](https://github.com/user-attachments/assets/0155480a-a7c5-4274-ab95-57a867b2a1cc)



### Checklist

- [ ] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios

---------

Co-authored-by: Elastic Machine <[email protected]>
  • Loading branch information
criamico and elasticmachine authored Oct 7, 2024
1 parent b4ba131 commit 71c8d6f
Showing 1 changed file with 20 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ import type { EuiCallOutProps } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';

import { useStartServices } from '../../../../hooks';
import { useStartServices, useAuthz } from '../../../../hooks';
import { MissingPrivilegesToolTip } from '../../../../../../components/missing_privileges_tooltip';

import { getLogstashPipeline, LOGSTASH_CONFIG_PIPELINES } from './helpers';
import { useLogstashApiKey } from './hooks';
Expand Down Expand Up @@ -64,7 +65,8 @@ export const LogstashInstructions = () => {

const CollapsibleCallout: React.FunctionComponent<EuiCallOutProps> = ({ children, ...props }) => {
const [isOpen, setIsOpen] = useState(false);

const authz = useAuthz();
const hasAllSettings = authz.fleet.allSettings;
return (
<EuiCallOut {...props}>
<EuiSpacer size="s" />
Expand All @@ -76,12 +78,17 @@ const CollapsibleCallout: React.FunctionComponent<EuiCallOutProps> = ({ children
/>
</EuiButton>
) : (
<EuiButton onClick={() => setIsOpen(true)} fill={true}>
<FormattedMessage
id="xpack.fleet.settings.logstashInstructions.viewInstructionButtonLabel"
defaultMessage="View steps"
/>
</EuiButton>
<MissingPrivilegesToolTip
missingPrivilege={!hasAllSettings ? 'Settings All' : undefined}
position="left"
>
<EuiButton onClick={() => setIsOpen(true)} fill={true} disabled={!hasAllSettings}>
<FormattedMessage
id="xpack.fleet.settings.logstashInstructions.viewInstructionButtonLabel"
defaultMessage="View steps"
/>
</EuiButton>
</MissingPrivilegesToolTip>
)}
{isOpen && (
<>
Expand All @@ -96,6 +103,8 @@ const CollapsibleCallout: React.FunctionComponent<EuiCallOutProps> = ({ children
const LogstashInstructionSteps = () => {
const { docLinks } = useStartServices();
const logstashApiKey = useLogstashApiKey();
const authz = useAuthz();
const hasAllSettings = authz.fleet.allSettings;

const steps = useMemo(
() => [
Expand All @@ -120,6 +129,7 @@ const LogstashInstructionSteps = () => {
onClick={copy}
iconType="copyClipboard"
color="text"
disabled={!hasAllSettings}
aria-label={i18n.translate(
'xpack.fleet.settings.logstashInstructions.copyApiKeyButtonLabel',
{
Expand All @@ -136,6 +146,7 @@ const LogstashInstructionSteps = () => {
<EuiButton
isLoading={logstashApiKey.isLoading}
onClick={logstashApiKey.generateApiKey}
disabled={!hasAllSettings}
>
<FormattedMessage
id="xpack.fleet.settings.logstashInstructions.generateApiKeyButtonLabel"
Expand Down Expand Up @@ -214,7 +225,7 @@ const LogstashInstructionSteps = () => {
),
},
],
[logstashApiKey, docLinks]
[logstashApiKey, docLinks, hasAllSettings]
);

return (
Expand Down

0 comments on commit 71c8d6f

Please sign in to comment.