From 69e60b5800be42cefa42838e56e9808025e241d5 Mon Sep 17 00:00:00 2001 From: zhangzhanwei Date: Tue, 24 Jun 2025 15:20:21 +0800 Subject: [PATCH] feat: Knowledge permission list --- ui/src/permission/knowledge/system-manage.ts | 32 ++-- ui/src/permission/knowledge/system-share.ts | 19 ++ ui/src/permission/knowledge/workspace.ts | 163 ++++++++++++++++- ui/src/router/modules/document.ts | 25 --- ui/src/utils/permission/data.ts | 1 + ui/src/utils/permission/type.ts | 7 + ui/src/views/document/index.vue | 173 ++++++------------- ui/src/views/knowledge/index.vue | 135 ++++----------- ui/src/views/problem/index.vue | 20 ++- 9 files changed, 317 insertions(+), 258 deletions(-) diff --git a/ui/src/permission/knowledge/system-manage.ts b/ui/src/permission/knowledge/system-manage.ts index adf904aa2..3983d1fff 100644 --- a/ui/src/permission/knowledge/system-manage.ts +++ b/ui/src/permission/knowledge/system-manage.ts @@ -6,21 +6,33 @@ const workspace = { hasPermission( new ComplexPermission( [RoleConst.ADMIN], - [PermissionConst.SHARED_TOOL_READ], + [PermissionConst.SHARED_KNOWLEDGE_READ], [EditionConst.IS_EE], 'OR', ), 'OR', ), - delete: () => - hasPermission( - [ - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - RoleConst.USER.getWorkspaceRole, - PermissionConst.TOOL_DELETE.getWorkspacePermission, - ], - 'OR', - ), + create: () => false, + single: () => false, + sync: () => false, + vector: () => false, + generate: () => false, + setting: () => false, + export: () => false, + delete: () => false, + + doc_create: () => false, + doc_vector: () => false, + doc_generate: () => false, + doc_migrate: () => false, + doc_edit: () => false, + doc_sync: () => false, + doc_delete: () => false, + doc_export: () => false, + + problem_create: () => false, + problem_relate: () => false, + problem_delete: () => false, } export default workspace diff --git a/ui/src/permission/knowledge/system-share.ts b/ui/src/permission/knowledge/system-share.ts index d70efd68e..637f627fe 100644 --- a/ui/src/permission/knowledge/system-share.ts +++ b/ui/src/permission/knowledge/system-share.ts @@ -3,5 +3,24 @@ import { ComplexPermission } from '@/utils/permission/type' import { EditionConst, PermissionConst, RoleConst } from '@/utils/permission/data' const share = { is_share: () => false, + create: () => false, + single: () => false, + sync: () => false, + vector: () => false, + generate: () => false, + setting: () => false, + export: () => false, + delete: () => false, + + doc_create: () => false, + doc_vector: () => false, + doc_generate: () => false, + doc_migrate: () => false, + doc_edit: () => false, + doc_sync: () => false, + doc_delete: () => false, + doc_export: () => false, + + } export default share diff --git a/ui/src/permission/knowledge/workspace.ts b/ui/src/permission/knowledge/workspace.ts index 00911d0e3..f153af801 100644 --- a/ui/src/permission/knowledge/workspace.ts +++ b/ui/src/permission/knowledge/workspace.ts @@ -6,12 +6,173 @@ const workspace = { hasPermission( new ComplexPermission( [RoleConst.ADMIN], - [PermissionConst.SHARED_TOOL_READ], + [PermissionConst.SHARED_KNOWLEDGE_READ], [EditionConst.IS_EE], 'OR', ), 'OR', ), + create: () => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.USER.getWorkspaceRole, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_CREATE.getWorkspacePermission, + PermissionConst.KNOWLEDGE_CREATE.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + single: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_READ.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_READ.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + sync: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_SYNC.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_SYNC.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + vector: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + generate: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_GENERATE.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_GENERATE.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + setting: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_EDIT.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + export: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_EXPORT.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_EXPORT.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + delete: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DELETE.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DELETE.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + doc_create: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_CREATE.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_CREATE.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + doc_vector: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + doc_generate: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_GENERATE.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_GENERATE.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + doc_migrate: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_MIGRATE.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_MIGRATE.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + doc_edit: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_EDIT.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_EDIT.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + doc_sync: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_SYNC.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_SYNC.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + doc_delete: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_DELETE.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_DELETE.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), + doc_export: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.KNOWLEDGE_DOCUMENT_EXPORT.getKnowledgeWorkspaceResourcePermission(source_id), + PermissionConst.KNOWLEDGE_DOCUMENT_EXPORT.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR', + ), } export default workspace diff --git a/ui/src/router/modules/document.ts b/ui/src/router/modules/document.ts index 6263a4010..0f87e81bb 100644 --- a/ui/src/router/modules/document.ts +++ b/ui/src/router/modules/document.ts @@ -19,12 +19,6 @@ const DocumentRouter = { active: 'document', parentPath: '/knowledge/:id/:folderId', parentName: 'KnowledgeDetail', - permission: [ - RoleConst.ADMIN, - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - PermissionConst.KNOWLEDGE_DOCUMENT_READ.getWorkspacePermission, - PermissionConst.KNOWLEDGE_DOCUMENT_READ.getWorkspacePermissionWorkspaceManageRole - ], }, component: () => import('@/views/document/index.vue'), }, @@ -38,12 +32,6 @@ const DocumentRouter = { active: 'problem', parentPath: '/knowledge/:id/:folderId', parentName: 'KnowledgeDetail', - permission: [ - RoleConst.ADMIN, - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - PermissionConst.KNOWLEDGE_PROBLEM_READ.getWorkspacePermission, - PermissionConst.KNOWLEDGE_PROBLEM_READ.getWorkspacePermissionWorkspaceManageRole - ], }, component: () => import('@/views/problem/index.vue'), }, @@ -70,12 +58,6 @@ const DocumentRouter = { parentPath: '/knowledge/:id/:folderId', parentName: 'KnowledgeDetail', resourceType: ChatUserResourceEnum.KNOWLEDGE, - permission: [ - RoleConst.ADMIN, - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - PermissionConst.WORKSPACE_CHAT_USER_READ.getWorkspacePermission, - PermissionConst.WORKSPACE_CHAT_USER_READ.getWorkspacePermissionWorkspaceManageRole - ], }, component: () => import('@/views/chat-user/index.vue'), }, @@ -89,13 +71,6 @@ const DocumentRouter = { active: 'setting', parentPath: '/knowledge/:id/:folderId', parentName: 'KnowledgeDetail', - permission: [ - RoleConst.ADMIN, - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermission, - PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermissionWorkspaceManageRole - ] - }, component: () => import('@/views/knowledge/KnowledgeSetting.vue'), }, diff --git a/ui/src/utils/permission/data.ts b/ui/src/utils/permission/data.ts index c1be24652..a6860091a 100644 --- a/ui/src/utils/permission/data.ts +++ b/ui/src/utils/permission/data.ts @@ -89,6 +89,7 @@ const PermissionConst = { KNOWLEDGE_EDIT: new Permission('KNOWLEDGE:READ+EDIT'), KNOWLEDGE_EXPORT: new Permission('KNOWLEDGE:READ+EXPORT'), KNOWLEDGE_DELETE: new Permission('KNOWLEDGE:READ+DELETE'), + KNOWLEDGE_GENERATE: new Permission('KNOWLEDGE:READ+GENERATE'), KNOWLEDGE_DOCUMENT_READ:new Permission('KNOWLEDGE_DOCUMENT:READ'), KNOWLEDGE_DOCUMENT_CREATE:new Permission('KNOWLEDGE_DOCUMENT:READ+CREATE'), diff --git a/ui/src/utils/permission/type.ts b/ui/src/utils/permission/type.ts index b587d2704..141d68653 100644 --- a/ui/src/utils/permission/type.ts +++ b/ui/src/utils/permission/type.ts @@ -1,4 +1,5 @@ import useStore from '@/stores' +import { useRoute } from 'vue-router' export type PF = () => Role | string | Permission | ComplexPermission export type CRF = () => Role | string export type CPF = () => Permission | string @@ -69,6 +70,12 @@ export class Permission { getKnowledgeWorkspaceResourcePermission = (resource_id: string) => { return this.getWorkspaceResourcePermission('KNOWLEDGE', resource_id) } + getTest=()=>{ + const route=useRoute() + debugger + console.log(route) + return "" + } /** * * @param resource_id 资源id diff --git a/ui/src/views/document/index.vue b/ui/src/views/document/index.vue index da63d0df7..96f7918e3 100644 --- a/ui/src/views/document/index.vue +++ b/ui/src/views/document/index.vue @@ -7,73 +7,51 @@
{{ $t('views.document.uploadDocument') }} {{ $t('views.document.importDocument') }} {{ $t('views.document.importDocument') }} {{ $t('views.knowledge.setting.vectorization') }} {{ $t('views.document.generateQuestion.title') }} {{ $t('views.document.setting.migration') }} @@ -87,10 +65,7 @@ {{ $t('common.setting') }} @@ -98,11 +73,9 @@ divided @click="syncMulDocument" :disabled="multipleSelection.length === 0" - v-if="knowledgeDetail.type === 1 && - hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - RoleConst.ADMIN, - PermissionConst.KNOWLEDGE_DOCUMENT_SYNC.getWorkspacePermission, - PermissionConst.KNOWLEDGE_DOCUMENT_SYNC.getKnowledgeWorkspaceResourcePermission(id)],'OR')" + v-if=" + permissionPrecise.doc_sync(id) + " >{{ $t('views.document.syncDocument') }} {{ $t('views.document.syncDocument') }} @@ -122,10 +93,7 @@ @click="deleteMulDocument" :disabled="multipleSelection.length === 0" v-if=" - hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - RoleConst.ADMIN, - PermissionConst.KNOWLEDGE_DOCUMENT_DELETE.getWorkspacePermission, - PermissionConst.KNOWLEDGE_DOCUMENT_DELETE.getKnowledgeWorkspaceResourcePermission(id)],'OR') + permissionPrecise.doc_delete(id) " >{{ $t('common.delete') }} @@ -148,10 +116,8 @@ class="mt-16" :data="documentData" :pagination-config="paginationConfig" - :quick-create="knowledgeDetail.type === 0&&hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - RoleConst.USER.getWorkspaceRole, - PermissionConst.KNOWLEDGE_DOCUMENT_CREATE.getWorkspacePermissionWorkspaceManageRole, - PermissionConst.KNOWLEDGE_DOCUMENT_CREATE.getWorkspacePermission],'OR')" + :quick-create="knowledgeDetail.type === 0 && + permissionPrecise.doc_create(id)" @sizeChange="handleSizeChange" @changePage="getList" @cell-mouse-enter="cellMouseEnter" @@ -395,6 +361,7 @@ size="small" v-model="row.is_active" :before-change="() => changeState(row)" + v-if="permissionPrecise.doc_edit(id)" /> @@ -412,10 +379,7 @@ text @click.stop="cancelTask(row, TaskType.EMBEDDING)" :title="$t('views.document.setting.cancelVectorization')" - v-hasPermission="[ - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.USER.getWorkspaceRole, - PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission, - ]" + v-if="permissionPrecise.doc_vector(id)" > @@ -426,10 +390,7 @@ text @click.stop="refreshDocument(row)" :title="$t('views.knowledge.setting.vectorization')" - v-hasPermission="[ - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.USER.getWorkspaceRole, - PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission, - ]" + v-if="permissionPrecise.doc_vector(id)" > @@ -440,10 +401,7 @@ text @click.stop="settingDoc(row)" :title="$t('common.setting')" - v-hasPermission="[ - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.USER.getWorkspaceRole, - PermissionConst.KNOWLEDGE_DOCUMENT_EDIT.getWorkspacePermission, - ]" + v-if="permissionPrecise.doc_edit(id)" > @@ -453,10 +411,6 @@ @@ -467,51 +421,38 @@ ([State.STARTED, State.PENDING] as Array).includes( getTaskState(row.status, TaskType.GENERATE_PROBLEM), )&& - hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - RoleConst.USER.getWorkspaceRole, - PermissionConst.KNOWLEDGE_PROBLEM_CREATE.getWorkspacePermission],'OR') - " + permissionPrecise.doc_generate(id)" @click="cancelTask(row, TaskType.GENERATE_PROBLEM)" > {{ $t('views.document.setting.cancelGenerateQuestion') }} {{ $t('views.document.generateQuestion.title') }} {{ $t('views.document.setting.migration') }} {{ $t('views.document.setting.export') }} Excel {{ $t('views.document.setting.export') }} Zip {{ $t('common.delete') }} @@ -527,10 +468,7 @@ text @click.stop="syncDocument(row)" :title="$t('views.knowledge.setting.sync')" - v-hasPermission="[ - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.USER.getWorkspaceRole, - PermissionConst.KNOWLEDGE_SYNC.getWorkspacePermission, - ]" + v-if="permissionPrecise.sync(id)" > @@ -540,16 +478,13 @@ v-if=" ([State.STARTED, State.PENDING] as Array).includes( getTaskState(row.status, TaskType.EMBEDDING), - ) + ) && + permissionPrecise.doc_vector(id) " type="primary" text @click.stop="cancelTask(row, TaskType.EMBEDDING)" :title="$t('views.document.setting.cancelVectorization')" - v-hasPermission="[ - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.USER.getWorkspaceRole, - PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission, - ]" > @@ -560,10 +495,7 @@ text @click.stop="refreshDocument(row)" :title="$t('views.knowledge.setting.vectorization')" - v-hasPermission="[ - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.USER.getWorkspaceRole, - PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission, - ]" + v-if="permissionPrecise.vector(id)" > @@ -574,10 +506,6 @@ @@ -631,20 +559,14 @@ {{ $t('views.document.setting.cancelVectorization') }} {{ $t('views.document.setting.cancelGenerate') }} @@ -686,9 +608,26 @@ import { TaskType, State } from '@/utils/status' import { t } from '@/locales' import { PermissionConst, RoleConst } from '@/utils/permission/data' import { hasPermission } from '@/utils/permission/index' +import permissionMap from '@/permission' + + +const route = useRoute() +const { folder, user } = useStore() + +const type = computed(() => { + if (route.path.includes('shared')) { + return 'systemShare' + } else if (route.path.includes('resource-management')) { + return 'systemManage' + } else { + return 'workspace' + } +}) +const permissionPrecise = computed(() => { + return permissionMap['knowledge'][type.value] +}) const router = useRouter() -const route = useRoute() const { params: { id, folderId }, // id为knowledgeID } = route as any diff --git a/ui/src/views/knowledge/index.vue b/ui/src/views/knowledge/index.vue index 6b1ccd9a2..9f5fa9f6b 100644 --- a/ui/src/views/knowledge/index.vue +++ b/ui/src/views/knowledge/index.vue @@ -8,7 +8,8 @@ :currentNodeKey="currentFolder?.id" @handleNodeClick="folderClickHandel" class="p-8" - showShared + :shareTitle="$t('views.system.share_knowledge')" + :showShared="permissionPrecise['is_share']()" @refreshTree="refreshFolder" /> @@ -48,13 +49,7 @@ {{ $t('common.create') }} @@ -198,15 +193,7 @@ @click=" router.push({ path: `/knowledge/${item.id}/${currentFolder.id}/document` }) " - v-hasPermission="[ - RoleConst.ADMIN, - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - PermissionConst.KNOWLEDGE_DOCUMENT_READ - .getWorkspacePermissionWorkspaceManageRole, - PermissionConst.KNOWLEDGE_DOCUMENT_READ.getKnowledgeWorkspaceResourcePermission( - item.id, - ), - ]" + v-if="permissionPrecise.single(item.id)" >