feat: Resource knowledge permission
Some checks are pending
sync2gitee / repo-sync (push) Waiting to run

This commit is contained in:
zhangzhanwei 2025-07-30 15:45:30 +08:00 committed by zhanweizhang7
parent 1f1a1bbad9
commit 00a4b09c99
8 changed files with 120 additions and 18 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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'),

View File

@ -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'),

View File

@ -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<any>({
[],
'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<any>({
),
})
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,

View File

@ -146,7 +146,9 @@
:content="$t('views.system.resource_management.management')"
placement="top"
>
<span class="mr-8">
<span class="mr-8"
v-if="ManagePermission()"
>
<el-button
type="primary"
text
@ -178,7 +180,9 @@
</el-button>
</span>
</el-tooltip>
<el-dropdown trigger="click">
<el-dropdown trigger="click"
v-if="MoreFilledPermission()"
>
<el-button text @click.stop>
<el-icon>
<MoreFilled />
@ -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<any>({
name: '',