feat: Shared knowledge access permission (#3450)

This commit is contained in:
zhanweizhang7 2025-07-02 11:35:14 +08:00 committed by GitHub
parent 6110bf314a
commit b71a854d7c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 78 additions and 37 deletions

View File

@ -754,12 +754,6 @@ class PermissionConstants(Enum):
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_VIEW], resource_permission_group_list=[ResourcePermissionConst.APPLICATION_VIEW],
) )
APPLICATION_TO_CHAT = Permission(group=Group.APPLICATION, operate=Operate.TO_CHAT,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
label=_('Chat')
)
APPLICATION_DEBUG = Permission(group=Group.APPLICATION, operate=Operate.DEBUG, APPLICATION_DEBUG = Permission(group=Group.APPLICATION, operate=Operate.DEBUG,
role_list=[RoleConstants.ADMIN, RoleConstants.USER], role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],

View File

@ -18,7 +18,7 @@ const getAPIKey: (application_id: string, loading?: Ref<boolean>) => Promise<Res
application_id, application_id,
loading, loading,
) => { ) => {
return get(`${prefix.value}/${application_id}/application`, undefined, loading) return get(`${prefix.value}/${application_id}/application_key`, undefined, loading)
} }
/** /**
@ -29,7 +29,7 @@ const postAPIKey: (application_id: string, loading?: Ref<boolean>) => Promise<Re
application_id, application_id,
loading, loading,
) => { ) => {
return post(`${prefix.value}/${application_id}/application`, {}, undefined, loading) return post(`${prefix.value}/${application_id}/application_key`, {}, undefined, loading)
} }
/** /**
@ -42,7 +42,7 @@ const delAPIKey: (
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<boolean>> = (application_id, api_key_id, loading) => { ) => Promise<Result<boolean>> = (application_id, api_key_id, loading) => {
return del( return del(
`${prefix.value}/${application_id}/application/${api_key_id}`, `${prefix.value}/${application_id}/application_key/${api_key_id}`,
undefined, undefined,
undefined, undefined,
loading, loading,
@ -63,7 +63,7 @@ const putAPIKey: (
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (application_id, api_key_id, data, loading) => { ) => Promise<Result<any>> = (application_id, api_key_id, data, loading) => {
return put( return put(
`${prefix.value}/${application_id}/application/${api_key_id}`, `${prefix.value}/${application_id}/application_key/${api_key_id}`,
data, data,
undefined, undefined,
loading, loading,

View File

@ -1,6 +1,7 @@
import { SourceTypeEnum } from '@/enums/common' import { SourceTypeEnum } from '@/enums/common'
import { get_next_route } from '@/utils/permission' import { get_next_route } from '@/utils/permission'
import { PermissionConst, RoleConst } from '@/utils/permission/data' import { EditionConst, PermissionConst, RoleConst } from '@/utils/permission/data'
import { ComplexPermission } from '@/utils/permission/type'
const DocumentRouter = { const DocumentRouter = {
path: '/knowledge/:id/:folderId', path: '/knowledge/:id/:folderId',
name: 'KnowledgeDetail', name: 'KnowledgeDetail',
@ -21,14 +22,30 @@ const DocumentRouter = {
group: 'KnowledgeDetail', group: 'KnowledgeDetail',
permission: [ permission: [
RoleConst.ADMIN, RoleConst.ADMIN,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
() => { () => {
const to: any = get_next_route() const to: any = get_next_route()
return PermissionConst.KNOWLEDGE_DOCUMENT_READ.getKnowledgeWorkspaceResourcePermission( if (to.params.folder_id == 'shared') {
to ? to.params.id : '', return RoleConst.ADMIN
) }else {
return RoleConst.WORKSPACE_MANAGE.getWorkspaceRole
}
}, },
PermissionConst.KNOWLEDGE_READ.getWorkspacePermissionWorkspaceManageRole, () => {
const to: any = get_next_route()
if (to.params.folderId == 'shared') {
return PermissionConst.SHARED_KNOWLEDGE_DOCUMENT_READ } else {
return PermissionConst.KNOWLEDGE_DOCUMENT_READ.getKnowledgeWorkspaceResourcePermission(
to ? to.params.id : '',
)}
},
() => {
const to: any = get_next_route()
if (to.params.folderId == 'shared'){ return RoleConst.ADMIN } else {
return PermissionConst.KNOWLEDGE_DOCUMENT_READ.getWorkspacePermissionWorkspaceManageRole
}
}
], ],
}, },
component: () => import('@/views/document/index.vue'), component: () => import('@/views/document/index.vue'),
@ -46,14 +63,20 @@ const DocumentRouter = {
group: 'KnowledgeDetail', group: 'KnowledgeDetail',
permission: [ permission: [
RoleConst.ADMIN, RoleConst.ADMIN,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
() => { () => {
const to: any = get_next_route() const to: any = get_next_route()
return PermissionConst.KNOWLEDGE_PROBLEM_READ.getKnowledgeWorkspaceResourcePermission( if (to.params.folderId == 'shared') { return RoleConst.ADMIN } else { return RoleConst.WORKSPACE_MANAGE.getWorkspaceRole }
to ? to.params.id : '', },
) () => {
const to: any = get_next_route()
if (to.params.folderId == 'shared') { return PermissionConst.SHARED_KNOWLEDGE_PROBLEM_READ } else { return PermissionConst.KNOWLEDGE_PROBLEM_READ.getKnowledgeWorkspaceResourcePermission(
to ? to.params.id : '',
) }
},
() => {
const to: any = get_next_route()
if (to.params.folderId == 'shared') { return RoleConst.ADMIN } else { return PermissionConst.KNOWLEDGE_PROBLEM_READ.getWorkspacePermissionWorkspaceManageRole }
}, },
PermissionConst.KNOWLEDGE_PROBLEM_READ.getWorkspacePermissionWorkspaceManageRole,
], ],
}, },
component: () => import('@/views/problem/index.vue'), component: () => import('@/views/problem/index.vue'),
@ -68,6 +91,23 @@ const DocumentRouter = {
parentPath: '/knowledge/:id/:folderId', parentPath: '/knowledge/:id/:folderId',
parentName: 'KnowledgeDetail', parentName: 'KnowledgeDetail',
group: 'KnowledgeDetail', group: 'KnowledgeDetail',
permission: [
RoleConst.ADMIN,
() => {
const to: any = get_next_route()
if (to.params.folderId == 'shared') { return RoleConst.ADMIN } else { return RoleConst.WORKSPACE_MANAGE.getWorkspaceRole }
},
() => {
const to: any = get_next_route()
if (to.params.folderId == 'shared') { return PermissionConst.SHARED_KNOWLEDGE_HIT_TEST_READ } else { return PermissionConst.KNOWLEDGE_HIT_TEST_READ.getKnowledgeWorkspaceResourcePermission(
to ? to.params.id : '',
) }
},
() => {
const to: any = get_next_route()
if (to.params.folderId == 'shared') { return RoleConst.ADMIN } else { return PermissionConst.KNOWLEDGE_HIT_TEST_READ.getWorkspacePermissionWorkspaceManageRole }
},
],
}, },
component: () => import('@/views/hit-test/index.vue'), component: () => import('@/views/hit-test/index.vue'),
}, },
@ -83,16 +123,15 @@ const DocumentRouter = {
parentName: 'KnowledgeDetail', parentName: 'KnowledgeDetail',
resourceType: SourceTypeEnum.KNOWLEDGE, resourceType: SourceTypeEnum.KNOWLEDGE,
group: 'KnowledgeDetail', group: 'KnowledgeDetail',
permission: [ permission: new ComplexPermission([ RoleConst.ADMIN,
RoleConst.ADMIN,
() => { () => {
const to: any = get_next_route() const to: any = get_next_route()
if (to.params.folderId == 'shared') { if (to.params.folderId == 'shared') {
return RoleConst.ADMIN return RoleConst.ADMIN
} else { } else {
return RoleConst.WORKSPACE_MANAGE.getWorkspaceRole return RoleConst.WORKSPACE_MANAGE.getWorkspaceRole()
} }
}, },],[
() => { () => {
const to: any = get_next_route() const to: any = get_next_route()
if (to.params.folderId == 'shared') { if (to.params.folderId == 'shared') {
@ -106,13 +145,10 @@ const DocumentRouter = {
() => { () => {
const to: any = get_next_route() const to: any = get_next_route()
if (to.params.folder_id == 'shared') { if (to.params.folder_id == 'shared') {
return RoleConst.ADMIN return PermissionConst.SHARED_KNOWLEDGE_CHAT_USER_READ
} else { } else { return PermissionConst.KNOWLEDGE_CHAT_USER_READ.getWorkspacePermissionWorkspaceManageRole() }
return PermissionConst.KNOWLEDGE_CHAT_USER_READ
.getWorkspacePermissionWorkspaceManageRole
}
}, },
], ],[EditionConst.IS_EE,EditionConst.IS_PE],'OR'),
}, },
component: () => import('@/views/chat-user/index.vue'), component: () => import('@/views/chat-user/index.vue'),
}, },
@ -129,14 +165,20 @@ const DocumentRouter = {
group: 'KnowledgeDetail', group: 'KnowledgeDetail',
permission: [ permission: [
RoleConst.ADMIN, RoleConst.ADMIN,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
() => { () => {
const to: any = get_next_route() const to: any = get_next_route()
return PermissionConst.KNOWLEDGE_EDIT.getKnowledgeWorkspaceResourcePermission( if (to.params.folderId == 'shared') { return RoleConst.ADMIN } else { return RoleConst.WORKSPACE_MANAGE.getWorkspaceRole }
to ? to.params.id : '', },
) () => {
const to: any = get_next_route()
if (to.params.folderId == 'shared') { return PermissionConst.SHARED_KNOWLEDGE_EDIT } else { return PermissionConst.KNOWLEDGE_EDIT.getKnowledgeWorkspaceResourcePermission(
to ? to.params.id : '',
) }
},
() => {
const to: any = get_next_route()
if (to.params.folderId == 'shared') { return RoleConst.ADMIN } else { return PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermissionWorkspaceManageRole }
}, },
PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermissionWorkspaceManageRole,
], ],
}, },
component: () => import('@/views/knowledge/KnowledgeSetting.vue'), component: () => import('@/views/knowledge/KnowledgeSetting.vue'),

View File

@ -190,6 +190,9 @@ const PermissionConst = {
SHARED_KNOWLEDGE_PROBLEM_EDIT: new Permission('SYSTEM_KNOWLEDGE_PROBLEM:READ+EDIT'), SHARED_KNOWLEDGE_PROBLEM_EDIT: new Permission('SYSTEM_KNOWLEDGE_PROBLEM:READ+EDIT'),
SHARED_KNOWLEDGE_PROBLEM_DELETE: new Permission('SYSTEM_KNOWLEDGE_PROBLEM:READ+DELETE'), SHARED_KNOWLEDGE_PROBLEM_DELETE: new Permission('SYSTEM_KNOWLEDGE_PROBLEM:READ+DELETE'),
SHARED_KNOWLEDGE_HIT_TEST_READ: new Permission('SYSTEM_KNOWLEDGE_HIT_TEST:READ'),
KNOWLEDGE_HIT_TEST_READ: new Permission('KNOWLEDGE_HIT_TEST:READ'),
SHARED_KNOWLEDGE_CHAT_USER_READ: new Permission('SYSTEM_KNOWLEDGE_CHAT_USER:READ'), SHARED_KNOWLEDGE_CHAT_USER_READ: new Permission('SYSTEM_KNOWLEDGE_CHAT_USER:READ'),
SHARED_KNOWLEDGE_CHAT_USER_EDIT: new Permission('SYSTEM_KNOWLEDGE_CHAT_USER:READ+EDIT'), SHARED_KNOWLEDGE_CHAT_USER_EDIT: new Permission('SYSTEM_KNOWLEDGE_CHAT_USER:READ+EDIT'),

View File

@ -222,7 +222,9 @@
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item @click.stop="getAccessToken(item.id)"> <el-dropdown-item @click.stop="getAccessToken(item.id)"
v-if="permissionPrecise.overview_access(item.id)"
>
<AppIcon iconName="app-create-chat"></AppIcon> <AppIcon iconName="app-create-chat"></AppIcon>
{{ $t('views.application.operation.toChat') }} {{ $t('views.application.operation.toChat') }}
</el-dropdown-item> </el-dropdown-item>