Commit 29d35247 by zhaochengxiang

资产权限

parent b9f41121
......@@ -219,4 +219,8 @@ export function* getResourceRelations(payload) {
export function* updateResourceState(payload) {
return yield call(service.updateResourceState, payload);
}
export function* getPrivilege(payload) {
return yield call(service.getPrivilege, payload);
}
\ No newline at end of file
......@@ -226,4 +226,8 @@ export function getResourceRelations(payload) {
export function updateResourceState(payload) {
return PostJSON("/dataassetmanager/resourceApi/updateResourceState", payload);
}
export function getPrivilege(payload) {
return GetJSON("/dataassetmanager/AuthorityApi/listAllowButtons", payload);
}
\ No newline at end of file
import React, { useMemo } from 'react';
import { Tooltip, Menu } from 'antd';
const FC = (props) => {
const { permissionKey, permissions, defaultPermission, disabled, tip, children, ...restProps } = props;
const havePermission = useMemo(() => {
let _havePermission = true;
if (defaultPermission===false) {
_havePermission = defaultPermission;
} else if (permissionKey) {
const index = (permissions||[]).findIndex(item => item === permissionKey);
_havePermission = (index !== -1);
}
return _havePermission;
}, [permissionKey, permissions, defaultPermission])
return (
<Menu.Item disabled={!havePermission||disabled} {...restProps}>
<Tooltip title={havePermission?tip:'暂无权限'}>
{children}
</Tooltip>
</Menu.Item>
)
}
export default FC;
\ No newline at end of file
......@@ -7,7 +7,7 @@ import { Subject } from 'rxjs';
import { dispatchLatest, action } from '../model';
import { set_sess_state } from "../model/reducer";
import { DataModelerRoleAdmin, DataModelerRoleUser, DataModelerRoleReader } from './constant';
import { DataModelerRoleAdmin, DataModelerRoleUser, DataModelerRoleReader, AssetManageReference, AssetBrowseReference, ResourceBrowseReference, AssetRecycleReference } from './constant';
//内网深交所环境 isSzseEnv true
//元曜公网环境 isSzseEnv false
......@@ -398,3 +398,16 @@ export function getDataModelerRole(user) {
return DataModelerRoleAdmin;
}
export function getAssetRange(menuName) {
if (menuName === AssetManageReference) {
return 'dataAsset_dataAssetManage';
} else if (menuName === AssetBrowseReference) {
return 'dataAsset_dataAssetBrowse';
} else if (menuName === ResourceBrowseReference) {
return 'dataAsset_resourceBrowse';
} else if (menuName === AssetRecycleReference) {
return 'dataAsset_unloadDataAsset';
}
return '';
}
\ No newline at end of file
......@@ -12,12 +12,13 @@ import ImportAssetDrawer from './ImportAssetDrawer';
import AssetEdit from './AddAssetModel';
import AssetDetailDrawer from "./AssetDetailDrawer";
import { dispatch, dispatchLatestHomepage } from '../../../../model';
import { showMessage, showNotifaction, getQueryParam, inputWidth, isSzseEnv } from '../../../../util';
import { showMessage, showNotifaction, getQueryParam, inputWidth, isSzseEnv, getAssetRange } from '../../../../util';
import { AnchorId, AnchorDirId, AnchorTimestamp, AssetBrowseReference, AssetManageReference, AssetRecycleReference, ResourceBrowseReference } from '../../../../util/constant';
import { FullScreenSvg, CancelFullScreenSvg } from './AssetSvg';
import AssetDeleteModal from './AssetDeleteModal';
import PermissionButton from '../../../../util/Component/PermissionButton';
import PermissionRcItem from '../../../../util/Component/PermissionRcItem';
import PermissionMenuItem from '../../../../util/Component/PermissionMenuItem';
import "./AssetTable.less";
import 'react-contexify/dist/ReactContexify.css';
......@@ -150,6 +151,7 @@ const AssetTable = (props) => {
const [ TableWidth, setTableWidth ] = useState(0);
const [ compact, setCompact ] = useState(false);
const [ assetDeleteModalVisible, setAssetDeleteModalVisible ] = useState(false);
const [ permissions, setPermissions ] = useState([]);
const [ modal, contextHolder ] = Modal.useModal();
const anchorId = getQueryParam(AnchorId, props?.location?.search);
......@@ -192,6 +194,7 @@ const AssetTable = (props) => {
setSelectItem({});
setCheckedKeys([]);
getPermissions();
if (shouldScrollRef.current === true) {
if (remoteRelationRef.current) {
getDataAssetLocationByRelation();
......@@ -223,31 +226,46 @@ const AssetTable = (props) => {
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [ keyword, pagination, elementsChanged, assetActionChanged, recursive, fullSearch ])
const canAdd = useMemo(() => {
const allowIndex = (permissions||[]).findIndex(item => item==='add');
return (allowIndex !== -1);
}, [permissions])
const canImport = useMemo(() => {
let _canImport = true;
checkedKeys?.forEach(key => {
const index = (assets||[]).findIndex(item => item.id === key);
if (index !== -1) {
const allowIndex = (assets[index].allowButtons||[]).findIndex(item => item==='import');
_canImport = (allowIndex !== -1);
}
})
if ((checkedKeys||[]).length === 0) {
const allowIndex = (permissions||[]).findIndex(item => item==='import');
_canImport = (allowIndex !== -1);
} else {
checkedKeys?.forEach(key => {
const index = (assets||[]).findIndex(item => item.id === key);
if (index !== -1) {
const allowIndex = (assets[index].allowButtons||[]).findIndex(item => item==='import');
_canImport = (allowIndex !== -1);
}
});
}
return _canImport;
}, [assets, checkedKeys])
}, [assets, checkedKeys, permissions])
const canExport = useMemo(() => {
let _canExport = true;
checkedKeys?.forEach(key => {
const index = (assets||[]).findIndex(item => item.id === key);
if (index !== -1) {
const allowIndex = (assets[index].allowButtons||[]).findIndex(item => item==='export');
_canExport = (allowIndex !== -1);
}
})
if ((checkedKeys||[]).length === 0) {
const allowIndex = (permissions||[]).findIndex(item => item==='export');
_canExport = (allowIndex !== -1);
} else {
checkedKeys?.forEach(key => {
const index = (assets||[]).findIndex(item => item.id === key);
if (index !== -1) {
const allowIndex = (assets[index].allowButtons||[]).findIndex(item => item==='export');
_canExport = (allowIndex !== -1);
}
});
}
return _canExport;
}, [assets, checkedKeys])
}, [assets, checkedKeys, permissions])
const canChangeDir = useMemo(() => {
let _canChangeDir = true;
......@@ -288,6 +306,19 @@ const AssetTable = (props) => {
}
}
const getPermissions = () => {
dispatch({
type: 'assetmanage.getPrivilege',
payload: {
range: getAssetRange(reference),
optionId: nodeId
},
callback: data => {
setPermissions(data);
}
});
}
const getDataAssetLocationByRelation = () => {
setLoading(true);
dispatch({
......@@ -435,7 +466,8 @@ const AssetTable = (props) => {
dirId: nodeId,
pageNum,
pageSize,
keyword: keyword
keyword: keyword,
range: getAssetRange(reference),
};
if (reference !== AssetRecycleReference) {
......@@ -447,16 +479,6 @@ const AssetTable = (props) => {
}
}
if (reference === AssetManageReference) {
params.range = 'dataAsset_dataAssetManage';
} else if (reference === AssetBrowseReference) {
params.range = 'dataAsset_dataAssetBrowse';
} else if (reference === ResourceBrowseReference) {
params.range = 'dataAsset_resourceBrowse';
} else if (reference === AssetRecycleReference) {
params.range = 'dataAsset_unloadDataAsset';
}
let url = 'assetmanage.listDataAssetsByPage';
if (reference===AssetRecycleReference) {
url = 'assetmanage.listRecycleBinDataAssetsByPage';
......@@ -833,32 +855,40 @@ const AssetTable = (props) => {
const moreMenu = (
<Menu>
{
(reference===AssetManageReference && nodeType!=='custom') && <Menu.Item>
(reference===AssetManageReference && nodeType!=='custom') && <PermissionMenuItem defaultPermission={canImport}>
<div className='text-center' onClick={importAsset}>
导入
</div>
</Menu.Item>
</PermissionMenuItem>
}
{
(reference===AssetManageReference || reference===AssetRecycleReference) && <React.Fragment>
<Menu.Item>
<PermissionMenuItem defaultPermission={canExport}>
<div className='text-center' onClick={exportAsset}>
导出
</div>
</Menu.Item>
<Menu.Item disabled={(checkedKeys||[]).length===0}>
</PermissionMenuItem>
<PermissionMenuItem
defaultPermission={canChangeDir}
disabled={(checkedKeys||[]).length===0}
tip={(checkedKeys||[]).length===0?'请先选择资产':''}
>
<div className='text-center' onClick={onBatchCatalogChangeBtnClick}>
{(reference===AssetRecycleReference)?'挂载':'变更目录'}
</div>
</Menu.Item>
</PermissionMenuItem>
{
//自定义目录下的资产不允许新增 删除
(nodeType!=='custom') && <Menu.Item disabled={(checkedKeys||[]).length===0}>
(nodeType!=='custom') && <PermissionMenuItem
defaultPermission={canDelete}
disabled={(checkedKeys||[]).length===0}
tip={(checkedKeys||[]).length===0?'请先选择资产':''}
>
<div className='text-center' onClick={deleteAssets}>
删除
</div>
</Menu.Item>
</PermissionMenuItem>
}
</React.Fragment>
}
......@@ -905,7 +935,12 @@ const AssetTable = (props) => {
<Space size={15}>
{
//栏目和自定义目录 不允许新增资产
(reference===AssetManageReference && nodeLevel!==1 && nodeType!=='custom') && <Button onClick={addAsset}>新增</Button>
(reference===AssetManageReference && nodeLevel!==1 && nodeType!=='custom') && <PermissionButton
defaultPermission={canAdd}
onClick={addAsset}
>
新增
</PermissionButton>
}
{
(compact && reference===AssetManageReference) ? <Dropdown overlay={moreMenu} placement="bottomCenter">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment