From bac0f79c93a0a7a7848420e7c12f9a3d59b9b31b Mon Sep 17 00:00:00 2001 From: zhangzhanwei Date: Wed, 25 Jun 2025 19:04:02 +0800 Subject: [PATCH] feat: Application router permission --- ui/src/permission/application/workspace.ts | 40 ++++++++++++++ ui/src/router/modules/application-detail.ts | 58 ++++++++++++++++++++- ui/src/router/modules/document.ts | 3 +- ui/src/utils/permission/data.ts | 8 ++- ui/src/views/chat-log/index.vue | 30 +++++------ ui/src/views/chat-user/index.vue | 24 +++++++-- 6 files changed, 138 insertions(+), 25 deletions(-) diff --git a/ui/src/permission/application/workspace.ts b/ui/src/permission/application/workspace.ts index 3a1ad3af..0ce3cca3 100644 --- a/ui/src/permission/application/workspace.ts +++ b/ui/src/permission/application/workspace.ts @@ -95,6 +95,46 @@ const workspace = { ], 'OR' ), + chat_user_edit: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_CHAT_USER_EDIT.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_CHAT_USER_EDIT.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), + chat_log_clear: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_CHAT_LOG_CLEAR_POLICY.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_CHAT_LOG_CLEAR_POLICY.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), + chat_log_export: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_CHAT_LOG_EXPORT.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_CHAT_LOG_EXPORT.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), + chat_log_add_knowledge: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_CHAT_LOG_ADD_KNOWLEDGE.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_CHAT_LOG_ADD_KNOWLEDGE.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), } diff --git a/ui/src/router/modules/application-detail.ts b/ui/src/router/modules/application-detail.ts index 5d5c4098..54d6e197 100644 --- a/ui/src/router/modules/application-detail.ts +++ b/ui/src/router/modules/application-detail.ts @@ -1,4 +1,5 @@ import { ChatUserResourceEnum } from '@/enums/workspaceChatUser' +import { get_next_route } from '@/utils/permission' import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data' @@ -19,6 +20,17 @@ const ApplicationDetailRouter = { active: 'overview', parentPath: '/application/:id/:type', parentName: 'ApplicationDetail', + permission: [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_OVERVIEW_READ.getWorkspacePermissionWorkspaceManageRole, + () => { + const to: any = get_next_route() + return PermissionConst.APPLICATION_OVERVIEW_READ.getApplicationWorkspaceResourcePermission( + to ? to.params.id : '', + ) + } + ] }, component: () => import('@/views/application-overview/index.vue'), }, @@ -32,6 +44,17 @@ const ApplicationDetailRouter = { active: 'setting', parentPath: '/application/:id/:type', parentName: 'ApplicationDetail', + permission: [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_EDIT.getWorkspacePermissionWorkspaceManageRole, + () => { + const to: any = get_next_route() + return PermissionConst.APPLICATION_EDIT.getApplicationWorkspaceResourcePermission( + to ? to.params.id : '', + ) + } + ] }, component: () => import('@/views/application/ApplicationSetting.vue'), }, @@ -45,7 +68,17 @@ const ApplicationDetailRouter = { active: 'access', parentPath: '/application/:id/:type', parentName: 'ApplicationDetail', - permission: [EditionConst.IS_PE, EditionConst.IS_EE], + permission: [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_ACCESS_READ.getWorkspacePermissionWorkspaceManageRole, + () => { + const to: any = get_next_route() + return PermissionConst.APPLICATION_ACCESS_READ.getApplicationWorkspaceResourcePermission( + to ? to.params.id : '', + ) + } + ] }, component: () => import('@/views/application/ApplicationAccess.vue'), }, @@ -60,7 +93,17 @@ const ApplicationDetailRouter = { parentPath: '/application/:id/:type', parentName: 'ApplicationDetail', resourceType: ChatUserResourceEnum.APPLICATION, - permission: [EditionConst.IS_PE, EditionConst.IS_EE], + permission: [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_CHAT_USER_READ.getWorkspacePermissionWorkspaceManageRole, + () => { + const to: any = get_next_route() + return PermissionConst.APPLICATION_CHAT_USER_READ.getApplicationWorkspaceResourcePermission( + to ? to.params.id : '', + ) + } + ] }, component: () => import('@/views/chat-user/index.vue'), }, @@ -74,6 +117,17 @@ const ApplicationDetailRouter = { active: 'chat-log', parentPath: '/application/:id/:type', parentName: 'ApplicationDetail', + permission: [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_CHAT_LOG_READ.getWorkspacePermissionWorkspaceManageRole, + () => { + const to: any = get_next_route() + return PermissionConst.APPLICATION_CHAT_LOG_READ.getApplicationWorkspaceResourcePermission( + to ? to.params.id : '', + ) + } + ] }, component: () => import('@/views/chat-log/index.vue'), }, diff --git a/ui/src/router/modules/document.ts b/ui/src/router/modules/document.ts index 264f6da7..752fd3ee 100644 --- a/ui/src/router/modules/document.ts +++ b/ui/src/router/modules/document.ts @@ -1,7 +1,6 @@ -import role from '@/api/system/role' import { ChatUserResourceEnum } from '@/enums/workspaceChatUser' import { get_next_route } from '@/utils/permission' -import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data' +import { PermissionConst, RoleConst } from '@/utils/permission/data' const DocumentRouter = { path: '/knowledge/:id/:folderId', name: 'KnowledgeDetail', diff --git a/ui/src/utils/permission/data.ts b/ui/src/utils/permission/data.ts index 77403110..28a346f8 100644 --- a/ui/src/utils/permission/data.ts +++ b/ui/src/utils/permission/data.ts @@ -130,14 +130,18 @@ const PermissionConst = { APPLICATION_OVERVIEW_API_KEY:new Permission('APPLICATION_OVERVIEW:READ+API_KEY'), APPLICATION_OVERVIEW_PUBLIC:new Permission('APPLICATION_OVERVIEW:READ+PUBLIC_ACCESS'), - APPLICATION_CHAT_LOG:new Permission('APPLICATION_CHAT_LOG:READ'), + APPLICATION_CHAT_LOG_READ:new Permission('APPLICATION_CHAT_LOG:READ'), APPLICATION_CHAT_LOG_ANNOTATION:new Permission('APPLICATION_CHAT_LOG:READ+ANNOTATION'), APPLICATION_CHAT_LOG_EXPORT:new Permission('APPLICATION_CHAT_LOG:READ+EXPORT'), - APPLICATION_CHAT_LOG_POLICY:new Permission('APPLICATION_CHAT_LOG:READ+CLEAR_POLICY'), + APPLICATION_CHAT_LOG_CLEAR_POLICY:new Permission('APPLICATION_CHAT_LOG:READ+CLEAR_POLICY'), + APPLICATION_CHAT_LOG_ADD_KNOWLEDGE:new Permission('APPLICATION_CHAT_LOG:READ+ADD_KNOWLEDGE'), APPLICATION_ACCESS_READ:new Permission('APPLICATION_ACCESS:READ'), APPLICATION_ACCESS_EDIT:new Permission('APPLICATION_ACCESS:READ+EDIT'), + APPLICATION_CHAT_USER_READ:new Permission('CHAT_USER:READ'), + APPLICATION_CHAT_USER_EDIT:new Permission('CHAT_USER:READ+EDIT'), + SHARED_TOOL_READ:new Permission('SYSTEM_TOOL:READ'), SHARED_TOOL_CREATE:new Permission('SYSTEM_TOOL:READ+CREATE'), SHARED_TOOL_EDIT:new Permission('SYSTEM_TOOL:READ+EDIT'), diff --git a/ui/src/views/chat-log/index.vue b/ui/src/views/chat-log/index.vue index 1ba2b41b..54978d9c 100644 --- a/ui/src/views/chat-log/index.vue +++ b/ui/src/views/chat-log/index.vue @@ -40,32 +40,20 @@
{{ $t('views.chatLog.buttons.clearStrategy') }} {{ $t('common.export') }} {{ $t('views.chatLog.addToKnowledge') }}
@@ -304,9 +292,19 @@ import type { FormInstance, FormRules } from 'element-plus' import { ElTable } from 'element-plus' import { PermissionConst, RoleConst } from '@/utils/permission/data' import { hasPermission } from '@/utils/permission/index' +import permissionMap from '@/permission' + +const route = useRoute() + +const apiType = computed<'workspace'>(() => { + return 'workspace' +}) +const permissionPrecise = computed(() => { + return permissionMap['application'][apiType.value] +}) + const { application, chatLog, user } = useStore() -const route = useRoute() const { params: { id }, } = route as any diff --git a/ui/src/views/chat-user/index.vue b/ui/src/views/chat-user/index.vue index 50043901..ae581d2f 100644 --- a/ui/src/views/chat-user/index.vue +++ b/ui/src/views/chat-user/index.vue @@ -41,7 +41,9 @@ {{ paginationConfig.total }} - + {{ t('common.save') }} @@ -54,10 +56,13 @@ -
+
{{ $t('views.chatUser.autoAuthorization') }}
+ :loading="loading" + >
@@ -108,8 +113,21 @@ import type { ChatUserGroupItem, ChatUserResourceParams, ChatUserGroupUserItem } import { useRoute } from 'vue-router' import { ChatUserResourceEnum } from '@/enums/workspaceChatUser' import { MsgSuccess } from '@/utils/message' +import permissionMap from '@/permission' const route = useRoute() + +const apiType = computed<'workspace'>(() => { + return 'workspace' +}) +const permissionPrecise = computed(() => { + return permissionMap['application'][apiType.value] +}) + +const { + params: { id }, +} = route as any + const resource: ChatUserResourceParams = reactive({ resource_id: route.params.id as string, resource_type: route.meta.resourceType as ChatUserResourceEnum }) const filterText = ref('')