Skip to content

Commit

Permalink
[Serverless][Security Solution][Endpoint] use useListPrivileges hoo…
Browse files Browse the repository at this point in the history
…k to check access to`.lists-*` (elastic#171412)

## Summary

Instead of using `useListsConfig` this PR uses `useListPrivileges` to
verify access to `.lists-*` index pattern.

follow up of elastic/pull/165613
related elastic/pull/170671 (closed in favour of this)
fixes elastic/issues/169268

### 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: Kibana Machine <[email protected]>
(cherry picked from commit 8c3322e)
  • Loading branch information
ashokaditya committed Nov 22, 2023
1 parent 79a4a3c commit cfd58ef
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,10 @@
* 2.0.
*/

import { useMemo } from 'react';
import { useListsConfig } from '../../../detections/containers/detection_engine/lists/use_lists_config';
import { useHasSecurityCapability } from '../../../helper_hooks';

export const useEndpointExceptionsCapability = (
capability: 'showEndpointExceptions' | 'crudEndpointExceptions'
) => {
const { loading: listsConfigLoading, needsConfiguration: needsListsConfiguration } =
useListsConfig();
const hasEndpointExceptionCapability = useHasSecurityCapability(capability);

return useMemo(
() => !listsConfigLoading && !needsListsConfiguration && hasEndpointExceptionCapability,
[hasEndpointExceptionCapability, listsConfigLoading, needsListsConfiguration]
);
): boolean => {
return useHasSecurityCapability(capability);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { getNewRule } from '../../../objects/rule';
import { createRule } from '../../../tasks/api_calls/rules';
import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule';
import { login } from '../../../tasks/login';
import { visit } from '../../../tasks/navigation';
import { ALERTS_URL } from '../../../urls/navigation';

/*
*
* Alert table is third party component which cannot be easily tested by jest.
* This test main checks if Alert Table does not call api/lists/index more than once.
*
* */

describe('Alert Table API calls', { tags: ['@ess', '@serverless'] }, () => {
let callCount: number = 0;

beforeEach(() => {
callCount = 0;
login();
createRule(getNewRule());
// intercept all calls to `api/lists/index`
// and count how many times it was called
cy.intercept('GET', '/api/lists/index', (req) => {
req.on('response', (res) => {
if (res.statusCode === 200) {
callCount += 1;
}
});
});

visit(ALERTS_URL);
waitForAlertsToPopulate();
});

it('should call `api/lists/index` only once', () => {
cy.get('[data-test-subj="alertsTable"]').then(() => {
expect(callCount, 'number of times lists index api is called').to.equal(1);
});
});
});

0 comments on commit cfd58ef

Please sign in to comment.