story操作权限限制
Some checks failed
test/timeline-frontend/pipeline/head There was a failure building this commit
Some checks failed
test/timeline-frontend/pipeline/head There was a failure building this commit
This commit is contained in:
@@ -27,7 +27,8 @@ const TimelineItem: React.FC<{
|
||||
item: StoryItem;
|
||||
handleOption: (item: StoryItem, option: 'add' | 'edit' | 'addSubItem' | 'editSubItem') => void;
|
||||
refresh: () => void;
|
||||
}> = ({ item, handleOption, refresh }) => {
|
||||
disableEdit?: boolean;
|
||||
}> = ({ item, handleOption, refresh, disableEdit }) => {
|
||||
const { styles } = useStyles();
|
||||
const intl = useIntl();
|
||||
const [expanded, setExpanded] = useState(false);
|
||||
@@ -97,7 +98,7 @@ const TimelineItem: React.FC<{
|
||||
}}
|
||||
extra={
|
||||
<div className={styles.actions}>
|
||||
{showActions && (
|
||||
{showActions && !disableEdit && (
|
||||
<>
|
||||
<Button
|
||||
type="text"
|
||||
@@ -212,6 +213,7 @@ const TimelineItem: React.FC<{
|
||||
open={openDetail}
|
||||
setOpen={setOpenDetail}
|
||||
handleDelete={handleDelete}
|
||||
disableEdit={disableEdit}
|
||||
handOption={handleOption}
|
||||
/>
|
||||
</Card>
|
||||
|
||||
@@ -27,6 +27,7 @@ interface Props {
|
||||
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
||||
handleDelete: () => void;
|
||||
handOption: (item: StoryItem, option: 'add' | 'edit' | 'addSubItem' | 'editSubItem') => void;
|
||||
disableEdit?: boolean;
|
||||
}
|
||||
|
||||
const TimelineItemDrawer: React.FC<Props> = (props) => {
|
||||
@@ -99,7 +100,7 @@ const TimelineItemDrawer: React.FC<Props> = (props) => {
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
footer={
|
||||
footer={ {disableEdit ??
|
||||
<div style={{ textAlign: 'right' }}>
|
||||
<Space>
|
||||
<Button
|
||||
@@ -132,8 +133,7 @@ const TimelineItemDrawer: React.FC<Props> = (props) => {
|
||||
<Button onClick={closeDrawer}>关闭</Button>
|
||||
</Space>
|
||||
</div>
|
||||
}
|
||||
>
|
||||
>}}
|
||||
<div style={{ padding: '0 24px' }}>
|
||||
<div style={{ marginBottom: '24px' }}>
|
||||
<h3>描述</h3>
|
||||
|
||||
1
src/pages/story/data.d.ts
vendored
1
src/pages/story/data.d.ts
vendored
@@ -40,6 +40,7 @@ export interface StoryType {
|
||||
itemCount: number,
|
||||
updatedId?: string;
|
||||
updateTime?: string;
|
||||
storyTime: string;
|
||||
logo?: string;
|
||||
}
|
||||
export interface BaseResponse {
|
||||
|
||||
@@ -12,6 +12,7 @@ import { useParams } from 'react-router';
|
||||
import AutoSizer from 'react-virtualized-auto-sizer';
|
||||
import { VariableSizeList as List } from 'react-window';
|
||||
import './index.css';
|
||||
import {judgePermission} from "@/pages/story/utils/utils";
|
||||
|
||||
// 格式化时间数组为易读格式
|
||||
const formatTimeArray = (time: string | number[] | undefined): string => {
|
||||
@@ -274,6 +275,7 @@ const Index = () => {
|
||||
setCurrentOption(option);
|
||||
setOpenAddItemModal(true);
|
||||
}}
|
||||
disableEdit={!judgePermission(detail.permissionType, 'edit')}
|
||||
refresh={() => {
|
||||
// 刷新当前页数据
|
||||
setPagination((prev) => ({ ...prev, current: 1 }));
|
||||
@@ -480,6 +482,7 @@ const Index = () => {
|
||||
<Button
|
||||
type="primary"
|
||||
size="large"
|
||||
disabled={!judgePermission(detail.permissionType, 'edit')}
|
||||
onClick={() => {
|
||||
setCurrentOption('add');
|
||||
setCurrentItem(undefined);
|
||||
@@ -500,6 +503,7 @@ const Index = () => {
|
||||
setOpenAddItemModal(true);
|
||||
}}
|
||||
icon={<PlusOutlined />}
|
||||
disabled={!judgePermission(detail.permissionType, 'edit')}
|
||||
type="primary"
|
||||
style={{
|
||||
right: 24,
|
||||
|
||||
@@ -9,12 +9,13 @@ import type { StoryType } from './data.d';
|
||||
import { addStory, deleteStory, queryTimelineList, updateStory } from './service';
|
||||
import useStyles from './style.style';
|
||||
import AuthorizeStoryModal from './components/AuthorizeStoryModal';
|
||||
import {judgePermission} from "@/pages/story/utils/utils";
|
||||
|
||||
|
||||
const { Search } = Input;
|
||||
|
||||
const ListContent = ({
|
||||
data: { createTime, updateTime, updateName, ownerName, itemCount },
|
||||
data: { storyTime, updateTime, updateName, ownerName, itemCount },
|
||||
}: {
|
||||
data: StoryType;
|
||||
}) => {
|
||||
@@ -27,15 +28,15 @@ const ListContent = ({
|
||||
</div>
|
||||
<div className={styles.listContentItem}>
|
||||
<span>最近更新人</span>
|
||||
<p>{updateName}</p>
|
||||
<p>{updateName ?? ownerName}</p>
|
||||
</div>
|
||||
<div className={styles.listContentItem}>
|
||||
<span>节点数</span>
|
||||
<p>{itemCount}</p>
|
||||
</div>
|
||||
<div className={styles.listContentItem}>
|
||||
<span>开始时间</span>
|
||||
<p>{createTime}</p>
|
||||
<span>故事时间</span>
|
||||
<p>{storyTime}</p>
|
||||
</div>
|
||||
<div className={styles.listContentItem}>
|
||||
<span>更新时间</span>
|
||||
@@ -190,6 +191,7 @@ export const BasicList: FC = () => {
|
||||
actions={[
|
||||
<a
|
||||
key="edit"
|
||||
disabled={judgePermission(item.permissionType as number, 'edit')}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
showEditModal(item);
|
||||
@@ -200,6 +202,7 @@ export const BasicList: FC = () => {
|
||||
// 增加授权操作,可以授权给其他用户
|
||||
<a
|
||||
key="authorize"
|
||||
disabled={judgePermission(item.permissionType as number, 'auth')}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
setCurrent(item);
|
||||
@@ -210,6 +213,7 @@ export const BasicList: FC = () => {
|
||||
</a>,
|
||||
<a
|
||||
key="delete"
|
||||
disabled={judgePermission(item.permissionType as number, 'delete')}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
deleteItem(item.instanceId ?? '');
|
||||
|
||||
18
src/pages/story/utils/utils.ts
Normal file
18
src/pages/story/utils/utils.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
// judge user permission
|
||||
/**
|
||||
* current permissionType: 1 - creator, 2 - admin, 3 - editor, 4 - viewer
|
||||
* @param permissionType
|
||||
* @param actionType
|
||||
*/
|
||||
export function judgePermission(permissionType: number | null, actionType: string): boolean {
|
||||
switch (actionType) {
|
||||
case 'delete':
|
||||
return permissionType === 1;
|
||||
case 'auth':
|
||||
return permissionType === 1 || permissionType === 2;
|
||||
case 'edit':
|
||||
return permissionType === 1 || permissionType === 2 || permissionType === 3;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user