知识库数据隔离测试完成
This commit is contained in:
@@ -99,6 +99,14 @@ export interface AiKnowledge extends BaseDTO {
|
||||
creatorDept?: string;
|
||||
/** 更新者 */
|
||||
updater?: string;
|
||||
/** 是否可读 */
|
||||
canRead?: boolean;
|
||||
/** 是否可写(修改知识库和文档) */
|
||||
canWrite?: boolean;
|
||||
/** 是否可删除(删除知识库和文档) */
|
||||
canDelete?: boolean;
|
||||
/** 权限类型(all/department/role等) */
|
||||
permissionType?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
type="success"
|
||||
@click="showAddSegmentDialog = true"
|
||||
size="default"
|
||||
:disabled="!props.canWrite"
|
||||
:title="props.canWrite ? '添加分段' : '无添加权限'"
|
||||
>
|
||||
添加分段
|
||||
</el-button>
|
||||
@@ -46,8 +48,10 @@
|
||||
:model-value="segment.enabled"
|
||||
:active-text="segment.enabled ? '已启用' : '已禁用'"
|
||||
:loading="segment._switching"
|
||||
:disabled="!props.canWrite"
|
||||
@change="handleToggleEnabled(segment, $event)"
|
||||
style="--el-switch-on-color: #67C23A; margin-right: 12px;"
|
||||
:title="props.canWrite ? '' : '无修改权限'"
|
||||
/>
|
||||
<el-tag
|
||||
:type="getStatusType(segment.status)"
|
||||
@@ -62,6 +66,8 @@
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="startEdit(segment)"
|
||||
:disabled="!props.canWrite"
|
||||
:title="props.canWrite ? '编辑分段' : '无编辑权限'"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
@@ -72,6 +78,8 @@
|
||||
size="small"
|
||||
@click="handleDeleteSegment(segment)"
|
||||
:loading="segment._deleting"
|
||||
:disabled="!props.canDelete"
|
||||
:title="props.canDelete ? '删除分段' : '无删除权限'"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
@@ -211,6 +219,10 @@ interface Props {
|
||||
datasetId: string;
|
||||
/** Dify文档ID */
|
||||
documentId: string;
|
||||
/** 是否可写(修改分段) */
|
||||
canWrite?: boolean;
|
||||
/** 是否可删除(删除分段) */
|
||||
canDelete?: boolean;
|
||||
}
|
||||
|
||||
const props = defineProps<Props>();
|
||||
|
||||
@@ -41,13 +41,30 @@
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<div class="knowledge-actions" @click.stop>
|
||||
<el-button size="small" @click="handleEdit">编辑</el-button>
|
||||
<el-button size="small" type="danger" @click="handleDelete">删除</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
@click="handleEdit"
|
||||
:disabled="!hasWritePermission"
|
||||
:title="hasWritePermission ? '编辑知识库' : '无编辑权限'"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
type="danger"
|
||||
@click="handleDelete"
|
||||
:disabled="!hasDeletePermission"
|
||||
:title="hasDeletePermission ? '删除知识库' : '无删除权限'"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue';
|
||||
import { useStore } from 'vuex';
|
||||
import type { AiKnowledge } from '@/types/ai';
|
||||
import { FILE_DOWNLOAD_URL } from '@/config';
|
||||
|
||||
@@ -62,6 +79,19 @@ interface Props {
|
||||
const props = defineProps<Props>();
|
||||
const emit = defineEmits(['click', 'edit', 'delete', 'sync']);
|
||||
|
||||
const store = useStore();
|
||||
const currentUserId = computed(() => store.getters['auth/user']?.id);
|
||||
|
||||
// 判断是否有写权限:是创建者 或 有canWrite权限
|
||||
const hasWritePermission = computed(() => {
|
||||
return props.knowledge.creator === currentUserId.value || props.knowledge.canWrite;
|
||||
});
|
||||
|
||||
// 判断是否有删除权限:是创建者 或 有canDelete权限
|
||||
const hasDeletePermission = computed(() => {
|
||||
return props.knowledge.creator === currentUserId.value || props.knowledge.canDelete;
|
||||
});
|
||||
|
||||
function handleClick() {
|
||||
emit('click', props.knowledge);
|
||||
}
|
||||
|
||||
@@ -7,11 +7,20 @@
|
||||
返回列表
|
||||
</el-button>
|
||||
<div class="header-actions">
|
||||
<el-button @click="handleEdit">
|
||||
<el-button
|
||||
@click="handleEdit"
|
||||
:disabled="!hasWritePermission"
|
||||
:title="hasWritePermission ? '编辑知识库' : '无编辑权限'"
|
||||
>
|
||||
<el-icon><Edit /></el-icon>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button type="primary" @click="handleUpload">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleUpload"
|
||||
:disabled="!hasWritePermission"
|
||||
:title="hasWritePermission ? '上传文档' : '无上传权限'"
|
||||
>
|
||||
<el-icon><Upload /></el-icon>
|
||||
上传文档
|
||||
</el-button>
|
||||
@@ -35,6 +44,15 @@
|
||||
<el-tag :type="knowledge.status === 1 ? 'success' : 'info'" size="small">
|
||||
{{ knowledge.status === 1 ? '已启用' : '已禁用' }}
|
||||
</el-tag>
|
||||
<el-tag v-if="knowledge.canRead" type="success" size="small" effect="plain">
|
||||
可读
|
||||
</el-tag>
|
||||
<el-tag v-if="knowledge.canWrite" type="warning" size="small" effect="plain">
|
||||
可写
|
||||
</el-tag>
|
||||
<el-tag v-if="knowledge.canDelete" type="danger" size="small" effect="plain">
|
||||
可删除
|
||||
</el-tag>
|
||||
<span class="meta-item">
|
||||
<el-icon><Clock /></el-icon>
|
||||
{{ formatDate(knowledge.createTime) }}
|
||||
@@ -149,8 +167,10 @@
|
||||
:model-value="row.enabled"
|
||||
:active-text="row.enabled ? '已启用' : '已禁用'"
|
||||
:loading="row._switching"
|
||||
:disabled="!hasWritePermission"
|
||||
@change="handleToggleEnabled(row, $event)"
|
||||
style="--el-switch-on-color: #67C23A; margin-right: 12px;"
|
||||
:title="hasWritePermission ? '' : '无修改权限'"
|
||||
/>
|
||||
<el-button link type="primary" @click="handleViewSegments(row)">
|
||||
查看分段
|
||||
@@ -158,7 +178,13 @@
|
||||
<el-button link type="primary" @click="handleDownload(row)">
|
||||
下载
|
||||
</el-button>
|
||||
<el-button link type="danger" @click="handleDeleteDocument(row)">
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDeleteDocument(row)"
|
||||
:disabled="!hasDeletePermission"
|
||||
:title="hasDeletePermission ? '删除文档' : '无删除权限'"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -207,6 +233,8 @@
|
||||
:model-value="segmentDialogVisible"
|
||||
:dataset-id="props.knowledge.difyDatasetId"
|
||||
:document-id="selectedDocument.difyDocumentId"
|
||||
:can-write="hasWritePermission"
|
||||
:can-delete="hasDeletePermission"
|
||||
@update:model-value="segmentDialogVisible = $event"
|
||||
/>
|
||||
</div>
|
||||
@@ -214,6 +242,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, watch } from 'vue';
|
||||
import { useStore } from 'vuex';
|
||||
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||
import type { UploadUserFile, UploadInstance } from 'element-plus';
|
||||
import {
|
||||
@@ -247,6 +276,19 @@ const emit = defineEmits<{
|
||||
edit: [knowledge: AiKnowledge];
|
||||
}>();
|
||||
|
||||
const store = useStore();
|
||||
const currentUserId = computed(() => store.getters['auth/user']?.id);
|
||||
|
||||
// 判断是否有写权限:是创建者 或 有canWrite权限
|
||||
const hasWritePermission = computed(() => {
|
||||
return props.knowledge?.creator === currentUserId.value || props.knowledge?.canWrite;
|
||||
});
|
||||
|
||||
// 判断是否有删除权限:是创建者 或 有canDelete权限
|
||||
const hasDeletePermission = computed(() => {
|
||||
return props.knowledge?.creator === currentUserId.value || props.knowledge?.canDelete;
|
||||
});
|
||||
|
||||
// 数据状态
|
||||
const documents = ref<AiUploadFile[]>([]);
|
||||
const loading = ref(false);
|
||||
|
||||
Reference in New Issue
Block a user