Skip to content

Commit

Permalink
Start addressing PR feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
legrego committed May 11, 2021
1 parent 00f374a commit 202485e
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 11 deletions.
20 changes: 13 additions & 7 deletions x-pack/plugins/file_upload/server/capabilities.test.ts
Expand Up @@ -133,7 +133,9 @@ describe('setupCapabilities', () => {
`);

expect(security.authz.mode.useRbacForRequest).toHaveBeenCalledTimes(1);
expect(security.authz.mode.useRbacForRequest).toHaveBeenCalledWith(request);
expect(security.authz.checkPrivilegesDynamicallyWithRequest).toHaveBeenCalledTimes(1);
expect(security.authz.checkPrivilegesDynamicallyWithRequest).toHaveBeenCalledWith(request);
});

it('registers a capabilities switcher that enables capabilities for privileged users', async () => {
Expand Down Expand Up @@ -176,13 +178,19 @@ describe('setupCapabilities', () => {
`);

expect(security.authz.mode.useRbacForRequest).toHaveBeenCalledTimes(1);
expect(security.authz.mode.useRbacForRequest).toHaveBeenCalledWith(request);
expect(security.authz.checkPrivilegesDynamicallyWithRequest).toHaveBeenCalledTimes(1);
expect(security.authz.checkPrivilegesDynamicallyWithRequest).toHaveBeenCalledWith(request);
});

it('registers a capabilities switcher that skips privilege check for anonymous routes', async () => {
it('registers a capabilities switcher that disables capabilities for unauthenticated requests', async () => {
const coreSetup = coreMock.createSetup();
const security = securityMock.createStart();
security.authz.mode.useRbacForRequest.mockReturnValue(true);
const mockCheckPrivileges = jest
.fn()
.mockRejectedValue(new Error('this should not have been called'));
security.authz.checkPrivilegesDynamicallyWithRequest.mockReturnValue(mockCheckPrivileges);
coreSetup.getStartServices.mockResolvedValue([
(undefined as unknown) as CoreStart,
{ security },
Expand All @@ -202,20 +210,17 @@ describe('setupCapabilities', () => {
},
} as Capabilities;

const request = httpServerMock.createKibanaRequest({ routeAuthRequired: false });
const request = httpServerMock.createKibanaRequest({ auth: { isAuthenticated: false } });

await expect(switcher(request, capabilities, false)).resolves.toMatchInlineSnapshot(`
Object {
"catalogue": Object {},
"fileUpload": Object {
"show": true,
"show": false,
},
"management": Object {},
"navLinks": Object {},
}
`);

expect(security.authz.mode.useRbacForRequest).not.toHaveBeenCalled();
expect(security.authz.mode.useRbacForRequest).toHaveBeenCalledTimes(1);
expect(security.authz.checkPrivilegesDynamicallyWithRequest).not.toHaveBeenCalled();
});

Expand Down Expand Up @@ -256,6 +261,7 @@ describe('setupCapabilities', () => {
`);

expect(security.authz.mode.useRbacForRequest).toHaveBeenCalledTimes(1);
expect(security.authz.mode.useRbacForRequest).toHaveBeenCalledWith(request);
expect(security.authz.checkPrivilegesDynamicallyWithRequest).not.toHaveBeenCalled();
});
});
5 changes: 2 additions & 3 deletions x-pack/plugins/file_upload/server/capabilities.ts
Expand Up @@ -10,7 +10,7 @@ import { checkFileUploadPrivileges } from './check_privileges';
import { StartDeps } from './types';

export const setupCapabilities = (
core: Pick<CoreSetup<StartDeps, unknown>, 'capabilities' | 'getStartServices'>
core: Pick<CoreSetup<StartDeps>, 'capabilities' | 'getStartServices'>
) => {
core.capabilities.registerProvider(() => {
return {
Expand All @@ -21,8 +21,7 @@ export const setupCapabilities = (
});

core.capabilities.registerSwitcher(async (request, capabilities, useDefaultCapabilities) => {
const isAnonymousRequest = !request.route.options.authRequired;
if (useDefaultCapabilities || isAnonymousRequest) {
if (useDefaultCapabilities) {
return capabilities;
}
const [, { security }] = await core.getStartServices();
Expand Down
4 changes: 4 additions & 0 deletions x-pack/plugins/file_upload/server/check_privileges.ts
Expand Up @@ -32,6 +32,10 @@ export const checkFileUploadPrivileges = async ({
return { hasImportPermission: true };
}

if (!request.auth.isAuthenticated) {
return { hasImportPermission: false };
}

const checkPrivilegesPayload: CheckPrivilegesPayload = {
elasticsearch: {
cluster: checkHasManagePipeline ? ['manage_pipeline'] : [],
Expand Down
3 changes: 2 additions & 1 deletion x-pack/plugins/security/server/index.ts
Expand Up @@ -26,7 +26,8 @@ export type {
InvalidateAPIKeyResult,
GrantAPIKeyResult,
} from './authentication';
export type { CheckPrivilegesPayload, AuthorizationServiceSetup } from './authorization';
export type { CheckPrivilegesPayload } from './authorization';
export type AuthorizationServiceSetup = SecurityPluginStart['authz'];
export { LegacyAuditLogger, AuditLogger, AuditEvent } from './audit';
export type { SecurityPluginSetup, SecurityPluginStart };
export type { AuthenticatedUser } from '../common/model';
Expand Down

0 comments on commit 202485e

Please sign in to comment.