diff --git a/x-pack/plugins/security/common/model/kibana_application_privilege.ts b/x-pack/plugins/security/common/model/kibana_application_privilege.ts deleted file mode 100644 index 54350ec2abcef..0000000000000 --- a/x-pack/plugins/security/common/model/kibana_application_privilege.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { KibanaPrivilege } from './kibana_privilege'; - -export interface KibanaApplicationPrivilege { - name: KibanaPrivilege; -} diff --git a/x-pack/plugins/security/common/model/kibana_privilege.ts b/x-pack/plugins/security/common/model/kibana_privilege.ts index 834e62570fe26..20cac65b4ca79 100644 --- a/x-pack/plugins/security/common/model/kibana_privilege.ts +++ b/x-pack/plugins/security/common/model/kibana_privilege.ts @@ -5,3 +5,5 @@ */ export type KibanaPrivilege = 'none' | 'read' | 'all'; + +export const KibanaAppPrivileges: KibanaPrivilege[] = ['read', 'all']; diff --git a/x-pack/plugins/security/index.js b/x-pack/plugins/security/index.js index 6ee655f8b0426..7262eadb999c6 100644 --- a/x-pack/plugins/security/index.js +++ b/x-pack/plugins/security/index.js @@ -16,7 +16,6 @@ import { validateConfig } from './server/lib/validate_config'; import { authenticateFactory } from './server/lib/auth_redirect'; import { checkLicense } from './server/lib/check_license'; import { initAuthenticator } from './server/lib/authentication/authenticator'; -import { initPrivilegesApi } from './server/routes/api/v1/privileges'; import { SecurityAuditLogger } from './server/lib/audit_logger'; import { AuditLogger } from '../../server/lib/audit_logger'; import { createAuthorizationService, registerPrivilegesWithCluster } from './server/lib/authorization'; @@ -161,7 +160,6 @@ export const security = (kibana) => new kibana.Plugin({ initUsersApi(server); initPublicRolesApi(server); initIndicesApi(server); - initPrivilegesApi(server); initLoginView(server, xpackMainPlugin); initLogoutView(server); diff --git a/x-pack/plugins/security/public/views/management/edit_role/components/edit_role_page.tsx b/x-pack/plugins/security/public/views/management/edit_role/components/edit_role_page.tsx index d4497582a7511..74396481e27ba 100644 --- a/x-pack/plugins/security/public/views/management/edit_role/components/edit_role_page.tsx +++ b/x-pack/plugins/security/public/views/management/edit_role/components/edit_role_page.tsx @@ -24,7 +24,7 @@ import React, { ChangeEvent, Component, HTMLProps } from 'react'; import { toastNotifications } from 'ui/notify'; import { Space } from '../../../../../../spaces/common/model/space'; import { IndexPrivilege } from '../../../../../common/model/index_privilege'; -import { KibanaApplicationPrivilege } from '../../../../../common/model/kibana_application_privilege'; +import { KibanaPrivilege } from '../../../../../common/model/kibana_privilege'; import { Role } from '../../../../../common/model/role'; import { isReservedRole } from '../../../../lib/role'; import { deleteRole, saveRole } from '../../../../objects'; @@ -42,7 +42,7 @@ interface Props { rbacEnabled: boolean; allowDocumentLevelSecurity: boolean; allowFieldLevelSecurity: boolean; - kibanaAppPrivileges: KibanaApplicationPrivilege[]; + kibanaAppPrivileges: KibanaPrivilege[]; notifier: any; spaces?: Space[]; spacesEnabled: boolean; diff --git a/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/kibana_privileges.tsx b/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/kibana_privileges.tsx index d9a4ba73af963..1ff7b62f715a7 100644 --- a/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/kibana_privileges.tsx +++ b/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/kibana_privileges.tsx @@ -6,7 +6,7 @@ import React, { Component } from 'react'; import { Space } from '../../../../../../../../spaces/common/model/space'; -import { KibanaApplicationPrivilege } from '../../../../../../../common/model/kibana_application_privilege'; +import { KibanaPrivilege } from '../../../../../../../common/model/kibana_privilege'; import { Role } from '../../../../../../../common/model/role'; import { RoleValidator } from '../../../lib/validate_role'; import { CollapsiblePanel } from '../../collapsible_panel'; @@ -18,7 +18,7 @@ interface Props { spacesEnabled: boolean; spaces?: Space[]; editable: boolean; - kibanaAppPrivileges: KibanaApplicationPrivilege[]; + kibanaAppPrivileges: KibanaPrivilege[]; onChange: (role: Role) => void; validator: RoleValidator; } diff --git a/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/simple_privilege_form.test.tsx b/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/simple_privilege_form.test.tsx index 018aed7df9bb1..d6ecbdb705b74 100644 --- a/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/simple_privilege_form.test.tsx +++ b/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/simple_privilege_form.test.tsx @@ -24,14 +24,7 @@ const buildProps = (customProps?: any) => { }, }, editable: true, - kibanaAppPrivileges: [ - { - name: 'all', - }, - { - name: 'read', - }, - ], + kibanaAppPrivileges: ['all', 'read'], onChange: jest.fn(), ...customProps, }; diff --git a/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/simple_privilege_form.tsx b/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/simple_privilege_form.tsx index 4d8892d88fce4..71b881c4a85ef 100644 --- a/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/simple_privilege_form.tsx +++ b/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/simple_privilege_form.tsx @@ -10,7 +10,6 @@ import { EuiFormRow, } from '@elastic/eui'; import React, { Component, Fragment } from 'react'; -import { KibanaApplicationPrivilege } from '../../../../../../../common/model/kibana_application_privilege'; import { KibanaPrivilege } from '../../../../../../../common/model/kibana_privilege'; import { Role } from '../../../../../../../common/model/role'; import { isReservedRole } from '../../../../../../lib/role'; @@ -19,7 +18,7 @@ import { copyRole } from '../../../lib/copy_role'; import { PrivilegeSelector } from './privilege_selector'; interface Props { - kibanaAppPrivileges: KibanaApplicationPrivilege[]; + kibanaAppPrivileges: KibanaPrivilege[]; role: Role; onChange: (role: Role) => void; editable: boolean; @@ -30,7 +29,6 @@ export class SimplePrivilegeForm extends Component { const { kibanaAppPrivileges, role } = this.props; const assignedPrivileges = role.kibana; - const availablePrivileges = kibanaAppPrivileges.map(privilege => privilege.name); const kibanaPrivilege: KibanaPrivilege = assignedPrivileges.global.length > 0 @@ -45,7 +43,7 @@ export class SimplePrivilegeForm extends Component { { }, ], editable: true, - kibanaAppPrivileges: [ - { - name: 'all', - }, - { - name: 'read', - }, - ], + kibanaAppPrivileges: ['all', 'read'], onChange: jest.fn(), validator: new RoleValidator(), ...customProps, diff --git a/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/space_aware_privilege_form.tsx b/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/space_aware_privilege_form.tsx index af76691b060f5..c48aa6d204779 100644 --- a/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/space_aware_privilege_form.tsx +++ b/x-pack/plugins/security/public/views/management/edit_role/components/privileges/kibana/space_aware_privilege_form.tsx @@ -17,7 +17,6 @@ import { } from '@elastic/eui'; import React, { Component, Fragment } from 'react'; import { Space } from '../../../../../../../../spaces/common/model/space'; -import { KibanaApplicationPrivilege } from '../../../../../../../common/model/kibana_application_privilege'; import { KibanaPrivilege } from '../../../../../../../common/model/kibana_privilege'; import { Role } from '../../../../../../../common/model/role'; import { isReservedRole } from '../../../../../../lib/role'; @@ -32,7 +31,7 @@ import { PrivilegeSpaceForm } from './privilege_space_form'; import { PrivilegeSpaceTable } from './privilege_space_table'; interface Props { - kibanaAppPrivileges: KibanaApplicationPrivilege[]; + kibanaAppPrivileges: KibanaPrivilege[]; role: Role; spaces: Space[]; onChange: (role: Role) => void; @@ -74,7 +73,6 @@ export class SpaceAwarePrivilegeForm extends Component { const { kibanaAppPrivileges, role } = this.props; const assignedPrivileges = role.kibana; - const availablePrivileges = kibanaAppPrivileges.map(privilege => privilege.name); const basePrivilege = assignedPrivileges.global.length > 0 ? assignedPrivileges.global[0] : NO_PRIVILEGE_VALUE; @@ -101,7 +99,7 @@ export class SpaceAwarePrivilegeForm extends Component { { - {this.renderSpacePrivileges(basePrivilege, availablePrivileges)} + {this.renderSpacePrivileges(basePrivilege, kibanaAppPrivileges)} ); } diff --git a/x-pack/plugins/security/public/views/management/edit_role/index.js b/x-pack/plugins/security/public/views/management/edit_role/index.js index 4fa4aaba4e2b0..5c744c908824c 100644 --- a/x-pack/plugins/security/public/views/management/edit_role/index.js +++ b/x-pack/plugins/security/public/views/management/edit_role/index.js @@ -27,6 +27,7 @@ import { EditRolePage } from './components'; import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; +import { KibanaAppPrivileges } from '../../../../common/model/kibana_privilege'; routes.when(`${EDIT_ROLES_PATH}/:name?`, { template, @@ -120,16 +121,13 @@ routes.when(`${EDIT_ROLES_PATH}/:name?`, { spaces, } = $route.current.locals; - // todo: don't hard-code this... - const kibanaApplicationPrivilege = [{ name: 'all' }, { name: 'read' } ]; - $scope.$$postDigest(() => { const domNode = document.getElementById('editRoleReactRoot'); render( { + loadTestFile(require.resolve('./es')); loadTestFile(require.resolve('./security')); loadTestFile(require.resolve('./monitoring')); loadTestFile(require.resolve('./xpack_main')); diff --git a/x-pack/test/rbac_api_integration/apis/index.js b/x-pack/test/rbac_api_integration/apis/index.js index f28f18b83c90d..5642b33982c99 100644 --- a/x-pack/test/rbac_api_integration/apis/index.js +++ b/x-pack/test/rbac_api_integration/apis/index.js @@ -180,8 +180,6 @@ export default function ({ loadTestFile, getService }) { }); }); - loadTestFile(require.resolve('./es')); - loadTestFile(require.resolve('./privileges')); loadTestFile(require.resolve('./saved_objects')); loadTestFile(require.resolve('./spaces')); }); diff --git a/x-pack/test/rbac_api_integration/apis/privileges/index.js b/x-pack/test/rbac_api_integration/apis/privileges/index.js deleted file mode 100644 index 60d674e48cd6b..0000000000000 --- a/x-pack/test/rbac_api_integration/apis/privileges/index.js +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -import expect from 'expect.js'; - -export default function ({ getService }) { - describe('privileges', () => { - it(`get should return privileges`, async () => { - const supertest = getService('supertest'); - const kibanaServer = getService('kibanaServer'); - const version = await kibanaServer.version.get(); - - await supertest - .get(`/api/security/v1/privileges`) - .expect(200) - .then(resp => { - expect(resp.body).to.eql({ - global: { - all: [`version:${version}`, 'action:*'], - read: [ - `version:${version}`, - 'action:login', - 'action:saved_objects/config/get', - 'action:saved_objects/config/bulk_get', - 'action:saved_objects/config/find', - 'action:saved_objects/timelion-sheet/get', - 'action:saved_objects/timelion-sheet/bulk_get', - 'action:saved_objects/timelion-sheet/find', - 'action:saved_objects/graph-workspace/get', - 'action:saved_objects/graph-workspace/bulk_get', - 'action:saved_objects/graph-workspace/find', - 'action:saved_objects/index-pattern/get', - 'action:saved_objects/index-pattern/bulk_get', - 'action:saved_objects/index-pattern/find', - 'action:saved_objects/visualization/get', - 'action:saved_objects/visualization/bulk_get', - 'action:saved_objects/visualization/find', - 'action:saved_objects/search/get', - 'action:saved_objects/search/bulk_get', - 'action:saved_objects/search/find', - 'action:saved_objects/dashboard/get', - 'action:saved_objects/dashboard/bulk_get', - 'action:saved_objects/dashboard/find', - 'action:saved_objects/url/get', - 'action:saved_objects/url/bulk_get', - 'action:saved_objects/url/find', - 'action:saved_objects/server/get', - 'action:saved_objects/server/bulk_get', - 'action:saved_objects/server/find', - ], - }, - space: { - all: [ - `version:${version}`, - 'action:login', - 'action:saved_objects/config/create', - 'action:saved_objects/config/bulk_create', - 'action:saved_objects/config/delete', - 'action:saved_objects/config/get', - 'action:saved_objects/config/bulk_get', - 'action:saved_objects/config/find', - 'action:saved_objects/config/update', - 'action:saved_objects/timelion-sheet/create', - 'action:saved_objects/timelion-sheet/bulk_create', - 'action:saved_objects/timelion-sheet/delete', - 'action:saved_objects/timelion-sheet/get', - 'action:saved_objects/timelion-sheet/bulk_get', - 'action:saved_objects/timelion-sheet/find', - 'action:saved_objects/timelion-sheet/update', - 'action:saved_objects/graph-workspace/create', - 'action:saved_objects/graph-workspace/bulk_create', - 'action:saved_objects/graph-workspace/delete', - 'action:saved_objects/graph-workspace/get', - 'action:saved_objects/graph-workspace/bulk_get', - 'action:saved_objects/graph-workspace/find', - 'action:saved_objects/graph-workspace/update', - 'action:saved_objects/index-pattern/create', - 'action:saved_objects/index-pattern/bulk_create', - 'action:saved_objects/index-pattern/delete', - 'action:saved_objects/index-pattern/get', - 'action:saved_objects/index-pattern/bulk_get', - 'action:saved_objects/index-pattern/find', - 'action:saved_objects/index-pattern/update', - 'action:saved_objects/visualization/create', - 'action:saved_objects/visualization/bulk_create', - 'action:saved_objects/visualization/delete', - 'action:saved_objects/visualization/get', - 'action:saved_objects/visualization/bulk_get', - 'action:saved_objects/visualization/find', - 'action:saved_objects/visualization/update', - 'action:saved_objects/search/create', - 'action:saved_objects/search/bulk_create', - 'action:saved_objects/search/delete', - 'action:saved_objects/search/get', - 'action:saved_objects/search/bulk_get', - 'action:saved_objects/search/find', - 'action:saved_objects/search/update', - 'action:saved_objects/dashboard/create', - 'action:saved_objects/dashboard/bulk_create', - 'action:saved_objects/dashboard/delete', - 'action:saved_objects/dashboard/get', - 'action:saved_objects/dashboard/bulk_get', - 'action:saved_objects/dashboard/find', - 'action:saved_objects/dashboard/update', - 'action:saved_objects/url/create', - 'action:saved_objects/url/bulk_create', - 'action:saved_objects/url/delete', - 'action:saved_objects/url/get', - 'action:saved_objects/url/bulk_get', - 'action:saved_objects/url/find', - 'action:saved_objects/url/update', - 'action:saved_objects/server/create', - 'action:saved_objects/server/bulk_create', - 'action:saved_objects/server/delete', - 'action:saved_objects/server/get', - 'action:saved_objects/server/bulk_get', - 'action:saved_objects/server/find', - 'action:saved_objects/server/update', - ], - read: [ - `version:${version}`, - 'action:login', - 'action:saved_objects/config/get', - 'action:saved_objects/config/bulk_get', - 'action:saved_objects/config/find', - 'action:saved_objects/timelion-sheet/get', - 'action:saved_objects/timelion-sheet/bulk_get', - 'action:saved_objects/timelion-sheet/find', - 'action:saved_objects/graph-workspace/get', - 'action:saved_objects/graph-workspace/bulk_get', - 'action:saved_objects/graph-workspace/find', - 'action:saved_objects/space/get', - 'action:saved_objects/space/bulk_get', - 'action:saved_objects/space/find', - 'action:saved_objects/index-pattern/get', - 'action:saved_objects/index-pattern/bulk_get', - 'action:saved_objects/index-pattern/find', - 'action:saved_objects/visualization/get', - 'action:saved_objects/visualization/bulk_get', - 'action:saved_objects/visualization/find', - 'action:saved_objects/search/get', - 'action:saved_objects/search/bulk_get', - 'action:saved_objects/search/find', - 'action:saved_objects/dashboard/get', - 'action:saved_objects/dashboard/bulk_get', - 'action:saved_objects/dashboard/find', - 'action:saved_objects/url/get', - 'action:saved_objects/url/bulk_get', - 'action:saved_objects/url/find', - 'action:saved_objects/server/get', - 'action:saved_objects/server/bulk_get', - 'action:saved_objects/server/find', - ], - }, - }); - }); - }); - }); -}