From bc23d26a297ef4a1cb29870bc83e62ae809354a8 Mon Sep 17 00:00:00 2001 From: xusongfu Date: Fri, 8 Oct 2021 15:39:01 +0800 Subject: [PATCH] fix: Fix the permission of QosPolicy Fix the permission of QosPolicy by qos endpoint Change-Id: I149e30c172d889ad4cbc4b7292fb20283f507791 --- src/client/client/constants.js | 1 + .../FloatingIp/actions/Allocate.jsx | 10 ++++-- .../containers/FloatingIp/actions/Edit.jsx | 36 ++++++++++++------- .../network/containers/FloatingIp/index.jsx | 6 ++++ .../containers/Network/Detail/Detail.jsx | 17 ++++++--- .../network/containers/QoSPolicy/QoSPolicy.js | 9 +++++ .../network/containers/QoSPolicy/index.jsx | 9 +++++ .../Detail/BaseDetail/index.jsx | 13 +++++-- .../VirtualAdapter/actions/Create.jsx | 7 ++++ .../VirtualAdapter/actions/ModifyQoS.jsx | 3 +- 10 files changed, 87 insertions(+), 24 deletions(-) diff --git a/src/client/client/constants.js b/src/client/client/constants.js index 0ede360d..ea2c7c49 100644 --- a/src/client/client/constants.js +++ b/src/client/client/constants.js @@ -67,6 +67,7 @@ export const octaviaBase = () => getOpenstackEndpoint('octavia'); export const ironicOriginEndpoint = () => getOriginEndpoint('ironic'); export const vpnEndpoint = () => getOriginEndpoint('neutron_vpn'); export const lbEndpoint = () => getOriginEndpoint('octavia'); +export const qosEndpoint = () => getOriginEndpoint('neutron_qos'); export const apiVersionMaps = { nova: { diff --git a/src/pages/network/containers/FloatingIp/actions/Allocate.jsx b/src/pages/network/containers/FloatingIp/actions/Allocate.jsx index 4d7700d8..881ea238 100644 --- a/src/pages/network/containers/FloatingIp/actions/Allocate.jsx +++ b/src/pages/network/containers/FloatingIp/actions/Allocate.jsx @@ -21,6 +21,7 @@ import globalProjectStore from 'stores/keystone/project'; import globalSubnetStore from 'stores/neutron/subnet'; import { QoSPolicyStore } from 'stores/neutron/qos-policy'; import { getQoSPolicyTabs } from 'resources/qos-policy'; +import { qosEndpoint } from 'client/client/constants'; export class Allocate extends ModalAction { static id = 'allocate'; @@ -32,11 +33,15 @@ export class Allocate extends ModalAction { } static get modalSize() { - return 'large'; + return qosEndpoint() ? 'large' : 'small'; } getModalSize() { - return 'large'; + return qosEndpoint() ? 'large' : 'small'; + } + + get qosEndpoint() { + return qosEndpoint(); } init() { @@ -221,6 +226,7 @@ export class Allocate extends ModalAction { isMulti: false, tip: t('Choosing a QoS policy can limit bandwidth and DSCP'), onChange: this.onQosChange, + display: !!this.qosEndpoint, }, ]; } diff --git a/src/pages/network/containers/FloatingIp/actions/Edit.jsx b/src/pages/network/containers/FloatingIp/actions/Edit.jsx index 794ee0d1..c7e7f694 100644 --- a/src/pages/network/containers/FloatingIp/actions/Edit.jsx +++ b/src/pages/network/containers/FloatingIp/actions/Edit.jsx @@ -17,6 +17,7 @@ import { ModalAction } from 'containers/Action'; import globalFloatingIpsStore from 'stores/neutron/floatingIp'; import { getQoSPolicyTabs } from 'resources/qos-policy'; import { QoSPolicyStore } from 'stores/neutron/qos-policy'; +import { qosEndpoint } from 'client/client/constants'; export class Edit extends ModalAction { static id = 'edit-floating-ip'; @@ -24,11 +25,15 @@ export class Edit extends ModalAction { static policy = 'update_floatingip'; static get modalSize() { - return 'large'; + return qosEndpoint() ? 'large' : 'small'; } getModalSize() { - return 'large'; + return qosEndpoint() ? 'large' : 'small'; + } + + get qosEndpoint() { + return qosEndpoint(); } init() { @@ -39,17 +44,21 @@ export class Edit extends ModalAction { const { item } = this.props; return { description: this.item.description, - qos_policy_id: { - selectedRowKeys: item.qos_policy_id ? [item.qos_policy_id] : [], - selectedRows: item.qos_policy_id - ? [ - { - id: item.qos_policy_id, - name: item.qos_policy_id, - }, - ] - : [], - }, + ...(this.qosEndpoint + ? { + qos_policy_id: { + selectedRowKeys: item.qos_policy_id ? [item.qos_policy_id] : [], + selectedRows: item.qos_policy_id + ? [ + { + id: item.qos_policy_id, + name: item.qos_policy_id, + }, + ] + : [], + }, + } + : {}), }; } @@ -86,6 +95,7 @@ export class Edit extends ModalAction { tabs: getQoSPolicyTabs.call(this), isMulti: false, tip: t('Choosing a QoS policy can limit bandwidth and DSCP'), + display: !!this.qosEndpoint, }, ]; } diff --git a/src/pages/network/containers/FloatingIp/index.jsx b/src/pages/network/containers/FloatingIp/index.jsx index 52f510e3..9557e134 100644 --- a/src/pages/network/containers/FloatingIp/index.jsx +++ b/src/pages/network/containers/FloatingIp/index.jsx @@ -21,6 +21,7 @@ import { Link } from 'react-router-dom'; import { emptyActionConfig } from 'utils/constants'; import { Col, Popover, Row } from 'antd'; import { FileTextOutlined } from '@ant-design/icons'; +import { qosEndpoint } from 'client/client/constants'; import styles from './styles.less'; import actionConfigs from './actions'; @@ -30,6 +31,10 @@ export class FloatingIps extends Base { this.downloadStore = new FloatingIpStore(); } + get qosEndpoint() { + return qosEndpoint(); + } + get isFilterByBackend() { return true; } @@ -128,6 +133,7 @@ export class FloatingIps extends Base { {value} ), + hidden: !this.qosEndpoint, }, { title: t('Project ID/Name'), diff --git a/src/pages/network/containers/Network/Detail/Detail.jsx b/src/pages/network/containers/Network/Detail/Detail.jsx index f418a242..343174fc 100644 --- a/src/pages/network/containers/Network/Detail/Detail.jsx +++ b/src/pages/network/containers/Network/Detail/Detail.jsx @@ -14,6 +14,7 @@ import { inject, observer } from 'mobx-react'; import Base from 'containers/BaseDetail'; +import { qosEndpoint } from 'client/client/constants'; @inject('rootStore') @observer @@ -23,6 +24,10 @@ export default class BaseDetail extends Base { return cards; } + get qosEndpoint() { + return qosEndpoint(); + } + get baseInfoCard() { const options = [ { @@ -55,17 +60,19 @@ export default class BaseDetail extends Base { label: t('Segmentation ID'), dataIndex: 'provider:segmentation_id', }, - { - label: t('QoS Policy'), - dataIndex: 'qos_policy_id', - render: (data) => data || '-', - }, { label: t('Port Security Enabled'), dataIndex: 'port_security_enabled', valueRender: 'yesNo', }, ]; + if (this.qosEndpoint) { + options.push({ + label: t('QoS Policy'), + dataIndex: 'qos_policy_id', + render: (data) => data || '-', + }); + } return { title: t('Base Info'), options, diff --git a/src/pages/network/containers/QoSPolicy/QoSPolicy.js b/src/pages/network/containers/QoSPolicy/QoSPolicy.js index a092454e..89232e29 100644 --- a/src/pages/network/containers/QoSPolicy/QoSPolicy.js +++ b/src/pages/network/containers/QoSPolicy/QoSPolicy.js @@ -16,6 +16,7 @@ import { observer, inject } from 'mobx-react'; import Base from 'containers/List'; import { QoSPolicyStore } from 'stores/neutron/qos-policy'; import { getQosPolicyColumns, getQosPolicyFilters } from 'resources/qos-policy'; +import { qosEndpoint } from 'client/client/constants'; import actionConfigs from './actions'; export class QoSPolicy extends Base { @@ -29,6 +30,14 @@ export class QoSPolicy extends Base { all_projects: this.tabKey === 'allQoSPolicy' || this.isAdminPage, }); + get checkEndpoint() { + return true; + } + + get endpoint() { + return qosEndpoint(); + } + get policy() { return 'get_policy'; } diff --git a/src/pages/network/containers/QoSPolicy/index.jsx b/src/pages/network/containers/QoSPolicy/index.jsx index b7bbe575..a3018406 100644 --- a/src/pages/network/containers/QoSPolicy/index.jsx +++ b/src/pages/network/containers/QoSPolicy/index.jsx @@ -14,11 +14,20 @@ import { observer, inject } from 'mobx-react'; import Base from 'containers/TabList'; +import { qosEndpoint } from 'client/client/constants'; import QoSPolicyComponent from './QoSPolicy'; @inject('rootStore') @observer export default class QoSPolicy extends Base { + get checkEndpoint() { + return true; + } + + get endpoint() { + return qosEndpoint(); + } + get tabs() { const tabs = [ { diff --git a/src/pages/network/containers/VirtualAdapter/Detail/BaseDetail/index.jsx b/src/pages/network/containers/VirtualAdapter/Detail/BaseDetail/index.jsx index c73944c1..a0279dc8 100644 --- a/src/pages/network/containers/VirtualAdapter/Detail/BaseDetail/index.jsx +++ b/src/pages/network/containers/VirtualAdapter/Detail/BaseDetail/index.jsx @@ -17,6 +17,7 @@ import { Link } from 'react-router-dom'; import { inject, observer } from 'mobx-react'; import Base from 'containers/BaseDetail'; import { bindingTypes } from 'resources/port'; +import { qosEndpoint } from 'client/client/constants'; @inject('rootStore') @observer @@ -25,6 +26,10 @@ export default class BaseDetail extends Base { return [this.baseInfoCard]; } + get qosEndpoint() { + return qosEndpoint(); + } + get baseInfoCard() { const options = [ { @@ -57,7 +62,9 @@ export default class BaseDetail extends Base { dataIndex: 'binding:vnic_type', render: (value) => bindingTypes[value] || '-', }, - { + ]; + if (this.qosEndpoint) { + options.push({ label: t('QoS Policy'), dataIndex: 'qos_policy_id', copyable: false, @@ -67,8 +74,8 @@ export default class BaseDetail extends Base { ) : ( '-' ), - }, - ]; + }); + } return { title: t('Base Info'), options, diff --git a/src/pages/network/containers/VirtualAdapter/actions/Create.jsx b/src/pages/network/containers/VirtualAdapter/actions/Create.jsx index a966efdf..1eb88cfa 100644 --- a/src/pages/network/containers/VirtualAdapter/actions/Create.jsx +++ b/src/pages/network/containers/VirtualAdapter/actions/Create.jsx @@ -24,6 +24,7 @@ import globalVirtualAdapterStore from 'stores/neutron/virtual-adapter'; import globalProjectStore from 'stores/keystone/project'; import { SubnetStore } from 'stores/neutron/subnet'; import { getQoSPolicyTabs } from 'resources/qos-policy'; +import { qosEndpoint } from 'client/client/constants'; const portTypes = 'normal,macvtap,direct,baremetal,direct-physical,virtio-forwarder,smart-nic'; @@ -33,6 +34,10 @@ export class CreateAction extends ModalAction { static title = t('Create Virtual Adapter'); + get qosEndpoint() { + return qosEndpoint(); + } + init() { this.networkStore = new NetworkStore(); this.securityGroupStore = new SecurityGroupStore(); @@ -312,6 +317,7 @@ export class CreateAction extends ModalAction { }); }, hidden: !more, + display: !!this.qosEndpoint, }, { name: 'qos_policy_id', @@ -322,6 +328,7 @@ export class CreateAction extends ModalAction { required: enableQosPolicy, tip: t('Choosing a QoS policy can limit bandwidth and DSCP'), hidden: !(more && enableQosPolicy), + display: !!this.qosEndpoint, }, { name: 'bindingProfile', diff --git a/src/pages/network/containers/VirtualAdapter/actions/ModifyQoS.jsx b/src/pages/network/containers/VirtualAdapter/actions/ModifyQoS.jsx index 13cb526d..e8bd1f0b 100644 --- a/src/pages/network/containers/VirtualAdapter/actions/ModifyQoS.jsx +++ b/src/pages/network/containers/VirtualAdapter/actions/ModifyQoS.jsx @@ -18,6 +18,7 @@ import { ModalAction } from 'containers/Action'; import { QoSPolicyStore } from 'stores/neutron/qos-policy'; import globalVirtualAdapterStore from 'stores/neutron/virtual-adapter'; import { getQoSPolicyTabs } from 'resources/qos-policy'; +import { qosEndpoint } from 'client/client/constants'; export class ModifyQoS extends ModalAction { static id = 'modify_qos'; @@ -87,7 +88,7 @@ export class ModifyQoS extends ModalAction { static policy = 'update_port'; - static allowed = () => Promise.resolve(true); + static allowed = () => Promise.resolve(!!qosEndpoint()); onSubmit = (values) => { const { id } = this.item;