Browse Source

(*) 最新元数据权限调整

master
liujiangyong 1 year ago
parent
commit
200ae4a458
  1. 11
      web/client/src/sections/metadataManagement/containers/databasesTable.js
  2. 8
      web/client/src/sections/metadataManagement/containers/filesTable.js
  3. 60
      web/client/src/sections/metadataManagement/containers/latestMetadata.js
  4. 4
      web/client/src/sections/metadataManagement/containers/metadataDetails.js
  5. 8
      web/client/src/sections/metadataManagement/containers/metadataTab.js
  6. 8
      web/client/src/sections/metadataManagement/containers/restapisTable.js

11
web/client/src/sections/metadataManagement/containers/databasesTable.js

@ -11,7 +11,7 @@ import MetadataResourceModal from '../components/metadataResourceModal';
import ReleaseModal from '../components/releaseModal';
const DatabaseTable = (props) => {
const { user, dispatch, actions, clientHeight, resourceCatalogId, resourceCatalogKey,
const { user, dispatch, actions, clientHeight, resourceCatalogId, resourceCatalogKey, isAdmin,
resourceCatalogPath, isRequesting, metadataModels, setView, tagList, metadataResourceApplications, params } = props;
const { metadataManagement } = actions;
const SortValues = { 'ascend': 'asc', 'descend': 'desc' };
@ -182,7 +182,7 @@ const DatabaseTable = (props) => {
ra.applyBy == user.id && ra.resourceName === record.name && ra.resourceId == record.id);
return <ButtonGroup>
<a onClick={() => onView(record)}>查看</a>
{user.role == '数据消费者' ? null :
{!isAdmin ? null :
<>
<a style={{ marginLeft: 10 }} onClick={() => onEdit(record)}>编辑</a>
<Popconfirm
@ -192,11 +192,10 @@ const DatabaseTable = (props) => {
{record.type === '表' ? <a style={{ marginLeft: 10 }} onClick={() => marking(record.id)}>打标</a> : null}
</>
}
{user.role !== '数据消费者' ? null : record.type === '表' ? resourceApplicationsRecords.length === 0 ?
{isAdmin ? null : record.type === '表' ? resourceApplicationsRecords.length === 0 ?
<a style={{ marginLeft: 10 }} onClick={() => applyResources(record)}>申请资源</a> :
<span style={{ marginLeft: 10, color: "#c0c0c0" }} title='已存在资源申请'>申请资源</span> : null}
{user.role == '数据消费者' ? null :
{!isAdmin ? null :
record.type === '表' ?
<a style={{ marginLeft: 10 }} onClick={() => servicePublication(record)}>REST服务发布</a> : null
}
@ -272,7 +271,7 @@ const DatabaseTable = (props) => {
return <Spin spinning={isRequesting}>
<Row style={{ marginBottom: 16 }}>
<Col span={12}>
{user.role == '数据消费者' ? null : <>
{!isAdmin ? null : <>
<Button type='primary' onClick={() => {
dispatch(metadataManagement.getMetadataModels({ modelTypes: ModelTypes.join(',') })).then(res => {
if (res.success) {

8
web/client/src/sections/metadataManagement/containers/filesTable.js

@ -12,7 +12,7 @@ import { RouteTable } from '$utils'
const FilesTable = (props) => {
const { user, dispatch, actions, clientHeight, resourceCatalogId, resourceCatalogKey,
isRequesting, metadataModels, tagList, metadataResourceApplications, params } = props;
isRequesting, metadataModels, tagList, metadataResourceApplications, params, isAdmin } = props;
const { metadataManagement } = actions;
const SortValues = { 'ascend': 'asc', 'descend': 'desc' };
const [tableData, setTableData] = useState([]);
@ -207,7 +207,7 @@ const FilesTable = (props) => {
let resourceApplicationsRecords = metadataResourceApplications.filter(ra =>
ra.applyBy == user.id && ra.resourceName === record.name && ra.resourceId == record.id && !!record.token);
return <ButtonGroup>
{user.role == '数据消费者' ? null :
{!isAdmin ? null :
<>
<a style={{ marginLeft: 10 }} onClick={() => onEdit(record)}>编辑</a>
<Popconfirm
@ -218,7 +218,7 @@ const FilesTable = (props) => {
</>
}
{user.role == '系统管理员' ? '' : resourceApplicationsRecords.length === 0 ?
{isAdmin ? '' : resourceApplicationsRecords.length === 0 ?
<a style={{ marginLeft: 10 }} onClick={() => applyResources(record)}>申请资源</a> :
<span style={{ marginLeft: 10, color: "#c0c0c0" }} title='已存在资源申请'>申请资源</span>}
</ButtonGroup>
@ -305,7 +305,7 @@ const FilesTable = (props) => {
return <Spin spinning={isRequesting}>
<Row style={{ marginBottom: 16 }}>
<Col span={12}>
{user.role == '数据消费者' ? null : <>
{!isAdmin ? null : <>
<Button type='primary' onClick={() => {
dispatch(metadataManagement.getMetadataModels({ modelTypes: '文件' })).then(res => {
if (res.success) {

60
web/client/src/sections/metadataManagement/containers/latestMetadata.js

@ -8,10 +8,12 @@ import MetadataTab from './metadataTab';
import MetadataDetails from './metadataDetails';
let expandedKeysData = [];
let allTreeNodeKeys = [];
let resourceCatalogRawData = [];
const LatestMetadata = (props) => {
const { user, dispatch, actions, history, clientHeight, resourceCatalog, isRequesting, location, match, organization } = props;
const { metadataManagement } = actions;
const [isAdmin, setIsAdmin] = useState(false);
const [resourceCatalogData, setResourceCatalogData] = useState([]);
const [selectedKeys, setSelectedKeys] = useState([]);
const [expandedKeys, setExpandedKeys] = useState([]);
@ -36,6 +38,7 @@ const LatestMetadata = (props) => {
dispatch(metadataManagement.getResourceCatalog()).then(res => {
const { data } = res.payload;
if (res.success) {
resourceCatalogRawData = data;
allTreeNodeKeys = []
const resourceCatalogData = getTreeNodeData(data, null, 'rc', [], null);
setResourceCatalogData(resourceCatalogData);
@ -47,6 +50,8 @@ const LatestMetadata = (props) => {
params?.catalogKey ? setSelectedKeys([params?.catalogKey]) : setSelectedKeys(expandedKeysData);
params?.catalogKey ? setExpandedKeys(getExpandKeys([params?.catalogKey])) : setExpandedKeys(expandedKeys);
params?.treeId && setResourceCatalogId(params?.treeId);
params?.treeId && params?.treeId && setIsAdmin(user?.username === 'SuperAdmin'
|| (user?.role === '系统管理员' && user?.orgId == resourceCatalogRawData.find(a => a.id == params?.treeId)?.orgId));
expandedKeysData = [];
}
} else {
@ -60,7 +65,10 @@ const LatestMetadata = (props) => {
const keyArr = selectedData[0].split('-');
keyArr.shift();//['rc-2-5']->返回'rc';keyArr:['2','5']
const allExpandedKeys = allTreeNodeKeys.filter(k => keyArr.includes(k.id.toString()));
!params?.treeId && setResourceCatalogId(keyArr.pop());
const resourceCatalogId = keyArr.pop();
!params?.treeId && setResourceCatalogId(resourceCatalogId);
!params?.treeId && setIsAdmin(user?.username === 'SuperAdmin'
|| (user?.role === '系统管理员' && user?.orgId == resourceCatalogRawData.find(a => a.id == resourceCatalogId)?.orgId));
setResourceCatalogKey(selectedData[0]);
const resourceCatalogPath = allExpandedKeys.map(a => a.name);
setResourceCatalogPath(resourceCatalogPath);
@ -104,27 +112,29 @@ const LatestMetadata = (props) => {
const renderTreeNode = (ds, dataSource) => {
return <div className={theStyle.icon} style={{ width: 180 }}>
{setTreeNodeTitle(ds.name)}
<EditOutlined title='修改' className={theStyle.tip} onClick={() => {
let record = JSON.parse(JSON.stringify(ds));
let parentData = dataSource.filter(rc => rc.id === record.parent);
record.parentName = parentData.length ? parentData[0].name : '';
setEditData({ record: record, title: '修改子类', child: ds.parent ? true : false, });
setModalVisible(true);
}} />
<Popconfirm placement="top" title={'确定删除该资源目录吗?'} onConfirm={() => {
dispatch(metadataManagement.delResourceCatalog(ds.id)).then((res) => {
if (res.success) {
expandedKeysData = []; initData(true);
}
setModalVisible(false);
});
}} okText="确定" cancelText="取消">
<MinusCircleOutlined title='删除' className={theStyle.tip} />
</Popconfirm>
<PlusCircleOutlined title='新建' className={theStyle.tip} onClick={() => {
setEditData({ record: { parent: ds.id, parentName: ds.name }, title: '新建子类', child: true, add: true });
setModalVisible(true);
}} />
{(user?.username === 'SuperAdmin' || (user?.role === '系统管理员' && user?.orgId == ds?.orgId)) && <>
<EditOutlined title='修改' className={theStyle.tip} onClick={() => {
let record = JSON.parse(JSON.stringify(ds));
let parentData = dataSource.filter(rc => rc.id === record.parent);
record.parentName = parentData.length ? parentData[0].name : '';
setEditData({ record: record, title: '修改子类', child: ds.parent ? true : false, });
setModalVisible(true);
}} />
<Popconfirm placement="top" title={'确定删除该资源目录吗?'} onConfirm={() => {
dispatch(metadataManagement.delResourceCatalog(ds.id)).then((res) => {
if (res.success) {
expandedKeysData = []; initData(true);
}
setModalVisible(false);
});
}} okText="确定" cancelText="取消">
<MinusCircleOutlined title='删除' className={theStyle.tip} />
</Popconfirm>
<PlusCircleOutlined title='新建' className={theStyle.tip} onClick={() => {
setEditData({ record: { parent: ds.id, parentName: ds.name, orgId: ds?.orgId }, title: '新建子类', child: true, add: true });
setModalVisible(true);
}} />
</>}
</div >
};
//新建、修改
@ -194,7 +204,7 @@ const LatestMetadata = (props) => {
allowClear onChange={onChangeSearch}
onKeyPress={onChangeSearch} />
{user?.role == '系统管理员' && <Button type='primary' style={{ marginBottom: 16 }} onClick={() => {
setEditData({ title: '新建资源目录', add: true });
setEditData({ title: '新建资源目录', add: true, record: { orgId: user?.orgId } });
setModalVisible(true);
}}>新建资源目录</Button>}
<Tree
@ -222,11 +232,13 @@ const LatestMetadata = (props) => {
<MetadataDetails resourceCatalogId={resourceCatalogId}
resourceCatalogKey={resourceCatalogKey}
resourceCatalogPath={resourceCatalogPath}
match={match} /> :
match={match}
isAdmin={isAdmin} /> :
<MetadataTab resourceCatalogId={resourceCatalogId}
resourceCatalogKey={resourceCatalogKey}
resourceCatalogPath={resourceCatalogPath}
params={params}
isAdmin={isAdmin}
/>
// <MetadataTab resourceCatalogId={params?.treeId}
// resourceCatalogKey={params?.catalogKey}

4
web/client/src/sections/metadataManagement/containers/metadataDetails.js

@ -7,7 +7,7 @@ import MetadataDatabaseModal from '../components/metadataDatabaseModal';
import { ModelTypes, ConfigurableTypes } from '../constants/index';
const MetadataDetails = (props) => {
const { user, actions, dispatch, clientHeight, metadataModels, isRequesting, resourceCatalogPath, match } = props;
const { user, actions, dispatch, clientHeight, metadataModels, isRequesting, resourceCatalogPath, match, isAdmin } = props;
const { metadataManagement } = actions;
const [activeKey, setActiveKey] = useState('info');
const [databasesRecord, setDatabasesRecord] = useState(null);
@ -108,7 +108,7 @@ const MetadataDetails = (props) => {
return databasesRecord && (ConfigurableTypes['表'].includes(databasesRecord.type) || databasesRecord.type === '视图') ? null : <Spin spinning={isRequesting}>
<div style={{ marginBottom: 16 }}>
{user?.role == '系统管理员' && <Button type='primary' onClick={() => {
{isAdmin && <Button type='primary' onClick={() => {
setEditData({ add: true, title: '新建库表元数据', record: { path: '/' + resourceCatalogPath.join('/'), type: ConfigurableTypes[databasesRecord.type][0] } });
setModalVisible(true);
}}>新建</Button>}

8
web/client/src/sections/metadataManagement/containers/metadataTab.js

@ -7,7 +7,7 @@ import RestapisTable from './restapisTable';
import { push } from 'react-router-redux';
const MetadataTab = (props) => {
const { resourceCatalogId, resourceCatalogKey, resourceCatalogPath, actions, dispatch, params } = props;
const { resourceCatalogId, resourceCatalogKey, resourceCatalogPath, actions, dispatch, params, isAdmin } = props;
const [activeKey, setActiveKey] = useState(params?.type || 'databases');
useEffect(() => {
if (!params?.type)
@ -42,11 +42,11 @@ const MetadataTab = (props) => {
</Tabs>
{
activeKey === 'databases' && resourceCatalogId ? <DatabaseTable params={params} resourceCatalogId={resourceCatalogId}
resourceCatalogKey={resourceCatalogKey} resourceCatalogPath={resourceCatalogPath} setView={onView} /> :
resourceCatalogKey={resourceCatalogKey} resourceCatalogPath={resourceCatalogPath} setView={onView} isAdmin={isAdmin} /> :
activeKey === 'files' && resourceCatalogId ? <FilesTable params={params} resourceCatalogId={resourceCatalogId}
resourceCatalogKey={resourceCatalogKey} resourceCatalogPath={resourceCatalogPath} /> :
resourceCatalogKey={resourceCatalogKey} resourceCatalogPath={resourceCatalogPath} isAdmin={isAdmin} /> :
activeKey === 'restapis' && resourceCatalogId ? < RestapisTable params={params} resourceCatalogId={resourceCatalogId}
resourceCatalogKey={resourceCatalogKey} resourceCatalogPath={resourceCatalogPath} /> : null
resourceCatalogKey={resourceCatalogKey} resourceCatalogPath={resourceCatalogPath} isAdmin={isAdmin} /> : null
}
</div>
}

8
web/client/src/sections/metadataManagement/containers/restapisTable.js

@ -8,7 +8,7 @@ import MetadataResourceModal from '../components/metadataResourceModal';
const RestapisTable = (props) => {
const { user, dispatch, actions, clientHeight, resourceCatalogId, resourceCatalogKey,
isRequesting, metadataModels, tagList, metadataResourceApplications, params } = props;
isRequesting, metadataModels, tagList, metadataResourceApplications, params, isAdmin } = props;
const { metadataManagement } = actions;
const [tableData, setTableData] = useState([]);
const [tableDataCount, setTableDataCount] = useState(0);//Table数据
@ -143,7 +143,7 @@ const RestapisTable = (props) => {
let resourceApplicationsRecords = metadataResourceApplications.filter(ra =>
ra.applyBy == user.id && ra.resourceName === record.name && ra.resourceId == record.id && !!record.token);
return <ButtonGroup>
{user.role == '数据消费者' ? null :
{!isAdmin ? null :
<>
<a style={{ marginLeft: 10 }} onClick={() => onEdit(record)}>编辑</a>
<Popconfirm
@ -154,7 +154,7 @@ const RestapisTable = (props) => {
</>
}
{user.role == '系统管理员' ? '' : resourceApplicationsRecords.length === 0 ?
{isAdmin ? '' : resourceApplicationsRecords.length === 0 ?
<a style={{ marginLeft: 10 }} onClick={() => applyResources(record)}>申请资源</a> :
<span style={{ marginLeft: 10, color: "#c0c0c0" }} title='已存在资源申请'>申请资源</span>}
</ButtonGroup>
@ -187,7 +187,7 @@ const RestapisTable = (props) => {
return <Spin spinning={isRequesting}>
<Row style={{ marginBottom: 16 }}>
<Col span={12}>
{user.role == '数据消费者' ? null : <> <Button type='primary' onClick={() => {
{!isAdmin ? null : <> <Button type='primary' onClick={() => {
dispatch(metadataManagement.getMetadataModels({ modelTypes: '接口' })).then(res => {
if (res.success) {
setEditData({ add: true, title: '新建接口元数据', record: {} });

Loading…
Cancel
Save