From 00a4b09c991cd10202d845f94083372797c63c0d Mon Sep 17 00:00:00 2001 From: zhangzhanwei Date: Wed, 30 Jul 2025 15:45:30 +0800 Subject: [PATCH] feat: Resource knowledge permission --- ui/src/permission/knowledge/system-manage.ts | 24 ++++++++- ui/src/permission/knowledge/system-share.ts | 7 ++- .../permission/knowledge/workspace-share.ts | 4 ++ ui/src/permission/knowledge/workspace.ts | 6 ++- ui/src/router/modules/document.ts | 50 +++++++++++++++++-- ui/src/utils/permission/data.ts | 1 + ui/src/views/chat-user/index.vue | 21 +++++--- .../KnowledgeResourceIndex.vue | 25 +++++++++- 8 files changed, 120 insertions(+), 18 deletions(-) diff --git a/ui/src/permission/knowledge/system-manage.ts b/ui/src/permission/knowledge/system-manage.ts index f26c6c88a..8f3662a66 100644 --- a/ui/src/permission/knowledge/system-manage.ts +++ b/ui/src/permission/knowledge/system-manage.ts @@ -50,6 +50,11 @@ const systemManage = { ],'OR' ), // 文档 + doc_read: () => + hasPermission([ + RoleConst.ADMIN, + PermissionConst.RESOURCE_KNOWLEDGE_DOCUMENT_READ + ],'OR'), doc_create: () => hasPermission( [ RoleConst.ADMIN, @@ -104,13 +109,23 @@ const systemManage = { PermissionConst.RESOURCE_KNOWLEDGE_DOCUMENT_DOWNLOAD_SOURCE_FILE ],'OR' ), - + + knowledge_chat_user_read: () => + hasPermission([ + RoleConst.ADMIN, + PermissionConst.RESOURCE_KNOWLEDGE_CHAT_USER_READ + ],'OR'), knowledge_chat_user_edit: () => hasPermission([ RoleConst.ADMIN, PermissionConst.RESOURCE_KNOWLEDGE_CHAT_USER_EDIT ],'OR'), - + + problem_read: () => + hasPermission([ + RoleConst.ADMIN, + PermissionConst.RESOURCE_KNOWLEDGE_PROBLEM_READ + ],'OR'), problem_create: () => hasPermission([ RoleConst.ADMIN, @@ -139,6 +154,11 @@ const systemManage = { folderCreate: () => false, folderEdit: () => false, folderDelete: () => false, + hit_test: () => + hasPermission([ + RoleConst.ADMIN, + PermissionConst.RESOURCE_KNOWLEDGE_HIT_TEST + ], 'OR'), } export default systemManage diff --git a/ui/src/permission/knowledge/system-share.ts b/ui/src/permission/knowledge/system-share.ts index 39f8116cb..805572fce 100644 --- a/ui/src/permission/knowledge/system-share.ts +++ b/ui/src/permission/knowledge/system-share.ts @@ -60,6 +60,7 @@ const share = { 'OR' ), + doc_read: () => false, doc_create: () => hasPermission ( [ @@ -140,6 +141,7 @@ const share = { ], 'OR' ), + knowledge_chat_user_read: () => false, knowledge_chat_user_edit: () => hasPermission( [ @@ -147,8 +149,8 @@ const share = { PermissionConst.SHARED_KNOWLEDGE_CHAT_USER_EDIT ], 'OR' - ) - , + ), + problem_read: () => false, problem_relate: () => hasPermission ( [ @@ -176,5 +178,6 @@ const share = { folderCreate: () => false, folderEdit: () => false, folderDelete: () => false, + hit_test: () => false, } export default share diff --git a/ui/src/permission/knowledge/workspace-share.ts b/ui/src/permission/knowledge/workspace-share.ts index 7a8427ef1..8747d8a00 100644 --- a/ui/src/permission/knowledge/workspace-share.ts +++ b/ui/src/permission/knowledge/workspace-share.ts @@ -11,6 +11,7 @@ const workspaceShare = { export: () => false, delete: () => false, + doc_read: () => false, doc_create: () => false, doc_vector: () => false, doc_generate: () => false, @@ -21,8 +22,10 @@ const workspaceShare = { doc_export: () => false, doc_download: () => false, + knowledge_chat_user_read: () => false, knowledge_chat_user_edit: () => false, + problem_read: () => false, problem_create: () => false, problem_relate: () => false, problem_delete: () => false, @@ -31,6 +34,7 @@ const workspaceShare = { folderCreate: () => false, folderEdit: () => false, folderDelete: () => false, + hit_test: () => false, } export default workspaceShare diff --git a/ui/src/permission/knowledge/workspace.ts b/ui/src/permission/knowledge/workspace.ts index cf820d76d..e632953be 100644 --- a/ui/src/permission/knowledge/workspace.ts +++ b/ui/src/permission/knowledge/workspace.ts @@ -110,6 +110,7 @@ const workspace = { ], 'OR', ), + doc_read: () => false, doc_create: (source_id:string) => hasPermission( [ @@ -200,6 +201,7 @@ const workspace = { ], 'OR', ), + knowledge_chat_user_read: (source_id:string) => false, knowledge_chat_user_edit: (source_id:string) => hasPermission( [ @@ -209,7 +211,8 @@ const workspace = { PermissionConst.KNOWLEDGE_CHAT_USER_EDIT.getWorkspacePermissionWorkspaceManageRole, ] ,'OR' - ), + ), + problem_read: () => false, problem_create: (source_id:string) => hasPermission( [ @@ -250,6 +253,7 @@ const workspace = { ], 'OR', ), + hit_test: () => false, } export default workspace diff --git a/ui/src/router/modules/document.ts b/ui/src/router/modules/document.ts index b02149c49..66a753bfd 100644 --- a/ui/src/router/modules/document.ts +++ b/ui/src/router/modules/document.ts @@ -61,7 +61,15 @@ const DocumentRouter = { const to: any = get_next_route() if(to.params.folderId == 'share') { return RoleConst.USER.getWorkspaceRole() } - } + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return RoleConst.ADMIN} + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return PermissionConst.RESOURCE_KNOWLEDGE_DOCUMENT_READ} + }, ], }, component: () => import('@/views/document/index.vue'), @@ -108,7 +116,15 @@ const DocumentRouter = { const to: any = get_next_route() if(to.params.folderId == 'share') { return RoleConst.USER.getWorkspaceRole() } - } + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return RoleConst.ADMIN} + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return PermissionConst.RESOURCE_KNOWLEDGE_PROBLEM_READ} + }, ], }, component: () => import('@/views/problem/index.vue'), @@ -154,7 +170,15 @@ const DocumentRouter = { const to: any = get_next_route() if(to.params.folderId == 'share') { return RoleConst.USER.getWorkspaceRole() } - } + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return RoleConst.ADMIN} + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return PermissionConst.RESOURCE_KNOWLEDGE_HIT_TEST} + }, ], }, component: () => import('@/views/hit-test/index.vue'), @@ -211,7 +235,15 @@ const DocumentRouter = { const to: any = get_next_route() if(to.params.folderId == 'share') { return RoleConst.USER.getWorkspaceRole() } - } + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return RoleConst.ADMIN} + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return PermissionConst.RESOURCE_KNOWLEDGE_CHAT_USER_READ} + }, ] }, component: () => import('@/views/chat-user/index.vue'), @@ -258,7 +290,15 @@ const DocumentRouter = { const to: any = get_next_route() if(to.params.folderId == 'share') { return RoleConst.USER.getWorkspaceRole() } - } + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return RoleConst.ADMIN} + }, + ()=>{ + const to: any = get_next_route() + if (to.params.folderId == 'resource-management') { return PermissionConst.RESOURCE_KNOWLEDGE_EDIT} + }, ], }, component: () => import('@/views/knowledge/KnowledgeSetting.vue'), diff --git a/ui/src/utils/permission/data.ts b/ui/src/utils/permission/data.ts index 624506199..1a080dd94 100644 --- a/ui/src/utils/permission/data.ts +++ b/ui/src/utils/permission/data.ts @@ -246,6 +246,7 @@ const PermissionConst = { RESOURCE_KNOWLEDGE_CHAT_USER_READ: new Permission('SYSTEM_RESOURCE_KNOWLEDGE_CHAT_USER:READ'), RESOURCE_KNOWLEDGE_CHAT_USER_EDIT: new Permission('SYSTEM_RESOURCE_KNOWLEDGE_CHAT_USER:READ+EDIT'), + RESOURCE_KNOWLEDGE_HIT_TEST: new Permission('SYSTEM_RESOURCE_KNOWLEDGE_HIT_TEST:READ'), RESOURCE_APPLICATION_READ: new Permission('SYSTEM_RESOURCE_APPLICATION:READ'), RESOURCE_APPLICATION_EDIT: new Permission('SYSTEM_RESOURCE_APPLICATION:READ+EDIT'), diff --git a/ui/src/views/chat-user/index.vue b/ui/src/views/chat-user/index.vue index 225a884cf..173562af9 100644 --- a/ui/src/views/chat-user/index.vue +++ b/ui/src/views/chat-user/index.vue @@ -63,9 +63,7 @@ ? false : hasPermission( permissionObj[ - route.path.includes('shared') - ? 'SHAREDKNOWLEDGE' - : (route.meta?.resourceType as string) + currentPermissionKey ], 'OR', ) @@ -96,9 +94,7 @@ ? false : hasPermission( permissionObj[ - route.path.includes('shared') - ? 'SHAREDKNOWLEDGE' - : (route.meta?.resourceType as string) + currentPermissionKey ], 'OR', ) @@ -207,6 +203,8 @@ const permissionObj = ref({ [], 'OR', ), + APPLICATION_KNOWLEDGE: [RoleConst.ADMIN, PermissionConst.RESOURCE_APPLICATION_CHAT_USER_EDIT], + RESOURCE_KNOWLEDGE: [RoleConst.ADMIN, PermissionConst.RESOURCE_KNOWLEDGE_CHAT_USER_EDIT], SHAREDKNOWLEDGE: new ComplexPermission( [RoleConst.ADMIN], [PermissionConst.SHARED_KNOWLEDGE_CHAT_USER_EDIT], @@ -215,6 +213,17 @@ const permissionObj = ref({ ), }) +const currentPermissionKey = computed(() => { + if (route.path.includes('shared')) return 'SHAREDKNOWLEDGE' + if (route.path.includes('resource-management')) { + if (route.meta?.resourceType === 'KNOWLEDGE') { return 'RESOURCE_KNOWLEDGE' } + else if (route.meta?.resourceType === 'APPLICATION') { return 'RESOURCE_APPLICATION' } + } + return route.meta?.resourceType as string +}) + +console.log(currentPermissionKey.value) + const resource = reactive({ resource_id: route.params.id as string, resource_type: route.meta.resourceType as string, diff --git a/ui/src/views/system-resource-management/KnowledgeResourceIndex.vue b/ui/src/views/system-resource-management/KnowledgeResourceIndex.vue index cddbb90ba..926ba5a19 100644 --- a/ui/src/views/system-resource-management/KnowledgeResourceIndex.vue +++ b/ui/src/views/system-resource-management/KnowledgeResourceIndex.vue @@ -146,7 +146,9 @@ :content="$t('views.system.resource_management.management')" placement="top" > - + - + @@ -264,6 +268,23 @@ const permissionPrecise = computed(() => { return permissionMap['knowledge']['systemManage'] }) +const ManagePermission = () => { + return permissionPrecise.value.doc_read() || + permissionPrecise.value.problem_read() || + permissionPrecise.value.edit() || + permissionPrecise.value.knowledge_chat_user_read() || + permissionPrecise.value.hit_test() +} +// sync generete edit export delete +const MoreFilledPermission = () => { + return permissionPrecise.value.sync() || + permissionPrecise.value.generate() || + permissionPrecise.value.edit() || + permissionPrecise.value.export() || + permissionPrecise.value.delete() +} + + const search_type = ref('name') const search_form = ref({ name: '',