From c3ee49217671a1c150af571a7fb81a7585f23d0a Mon Sep 17 00:00:00 2001 From: zhangzhanwei Date: Wed, 25 Jun 2025 17:18:47 +0800 Subject: [PATCH] feat: Application permission --- ui/src/permission/application/index.ts | 5 + ui/src/permission/application/workspace.ts | 101 ++++++++++++++++++ ui/src/permission/index.ts | 2 + ui/src/permission/knowledge/workspace.ts | 12 +-- ui/src/router/modules/application-detail.ts | 16 --- ui/src/router/modules/application.ts | 1 + ui/src/router/modules/knowledge.ts | 1 + ui/src/router/modules/model.ts | 1 + ui/src/router/modules/system.ts | 13 ++- ui/src/router/modules/tool.ts | 1 + ui/src/utils/permission/data.ts | 16 +-- ui/src/views/application-overview/index.vue | 43 +++----- .../views/application/ApplicationAccess.vue | 23 ++-- .../views/application/ApplicationSetting.vue | 19 ++-- ui/src/views/application/index.vue | 53 +++------ 15 files changed, 194 insertions(+), 113 deletions(-) create mode 100644 ui/src/permission/application/index.ts create mode 100644 ui/src/permission/application/workspace.ts diff --git a/ui/src/permission/application/index.ts b/ui/src/permission/application/index.ts new file mode 100644 index 000000000..38104dbd8 --- /dev/null +++ b/ui/src/permission/application/index.ts @@ -0,0 +1,5 @@ +import workspace from './workspace' +const permission = { + workspace, +} +export default permission diff --git a/ui/src/permission/application/workspace.ts b/ui/src/permission/application/workspace.ts new file mode 100644 index 000000000..3a1ad3af7 --- /dev/null +++ b/ui/src/permission/application/workspace.ts @@ -0,0 +1,101 @@ +import { hasPermission } from '@/utils/permission/index' +import { PermissionConst, RoleConst } from '@/utils/permission/data' + +const workspace = { + create: () => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.USER.getWorkspaceRole, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_CREATE.getWorkspacePermission, + PermissionConst.APPLICATION_CREATE.getWorkspacePermissionWorkspaceManageRole, + ], + 'OR' + ), + edit: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_EDIT.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_EDIT.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), + export: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_EXPORT.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_EXPORT.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), + delete: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_DELETE.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_DELETE.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), + overview_embed: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_OVERVIEW_EMBEDDED.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_OVERVIEW_EMBEDDED.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), + overview_access: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_OVERVIEW_ACCESS.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_OVERVIEW_ACCESS.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ) + + , + overview_display: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_OVERVIEW_DISPLAY.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_OVERVIEW_DISPLAY.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), + overview_api_key: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_OVERVIEW_API_KEY.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_OVERVIEW_API_KEY.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), + access_edit: (source_id:string) => + hasPermission( + [ + RoleConst.ADMIN, + RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, + PermissionConst.APPLICATION_ACCESS_EDIT.getWorkspacePermissionWorkspaceManageRole, + PermissionConst.APPLICATION_ACCESS_EDIT.getApplicationWorkspaceResourcePermission(source_id) + ], + 'OR' + ), +} + + +export default workspace \ No newline at end of file diff --git a/ui/src/permission/index.ts b/ui/src/permission/index.ts index a4bce21a6..3985ee393 100644 --- a/ui/src/permission/index.ts +++ b/ui/src/permission/index.ts @@ -1,9 +1,11 @@ import tool from '@/permission/tool' import model from '@/permission/model' import knowledge from '@/permission/knowledge' +import application from '@/permission/application' const permission = { tool, model, knowledge, + application, } export default permission diff --git a/ui/src/permission/knowledge/workspace.ts b/ui/src/permission/knowledge/workspace.ts index 7d997f927..fd2c5d195 100644 --- a/ui/src/permission/knowledge/workspace.ts +++ b/ui/src/permission/knowledge/workspace.ts @@ -32,7 +32,7 @@ const workspace = { PermissionConst.KNOWLEDGE_DOCUMENT_SYNC.getWorkspacePermissionWorkspaceManageRole, ], 'OR', - ), + ), vector: (source_id:string) => hasPermission( [ @@ -122,7 +122,7 @@ const workspace = { PermissionConst.KNOWLEDGE_DOCUMENT_MIGRATE.getWorkspacePermissionWorkspaceManageRole, ], 'OR', - ), + ), doc_edit: (source_id:string) => hasPermission( [ @@ -142,7 +142,7 @@ const workspace = { PermissionConst.KNOWLEDGE_DOCUMENT_SYNC.getWorkspacePermissionWorkspaceManageRole, ], 'OR', - ), + ), doc_delete: (source_id:string) => hasPermission( [ @@ -152,7 +152,7 @@ const workspace = { PermissionConst.KNOWLEDGE_DOCUMENT_DELETE.getWorkspacePermissionWorkspaceManageRole, ], 'OR', - ), + ), doc_export: (source_id:string) => hasPermission( [ @@ -162,7 +162,7 @@ const workspace = { PermissionConst.KNOWLEDGE_DOCUMENT_EXPORT.getWorkspacePermissionWorkspaceManageRole, ], 'OR', - ), + ), problem_create: (source_id:string) => hasPermission( [ @@ -192,7 +192,7 @@ const workspace = { PermissionConst.KNOWLEDGE_PROBLEM_DELETE.getWorkspacePermissionWorkspaceManageRole, ], 'OR', - ), + ), } export default workspace diff --git a/ui/src/router/modules/application-detail.ts b/ui/src/router/modules/application-detail.ts index 16b876134..5d5c4098d 100644 --- a/ui/src/router/modules/application-detail.ts +++ b/ui/src/router/modules/application-detail.ts @@ -19,10 +19,6 @@ const ApplicationDetailRouter = { active: 'overview', parentPath: '/application/:id/:type', parentName: 'ApplicationDetail', - permission: [ - PermissionConst.APPLICATION_OVERVIEW_READ.getWorkspacePermission, - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - ], }, component: () => import('@/views/application-overview/index.vue'), }, @@ -53,18 +49,6 @@ const ApplicationDetailRouter = { }, component: () => import('@/views/application/ApplicationAccess.vue'), }, - { - path: 'hit-test', - name: 'AppHitTest', - meta: { - icon: 'app-hit-test', - title: 'views.application.hitTest.title', - active: 'hit-test', - parentPath: '/application/:id/:type', - parentName: 'ApplicationDetail', - }, - component: () => import('@/views/hit-test/index.vue'), - }, { path: 'chat-user', name: 'applicationChatUser', diff --git a/ui/src/router/modules/application.ts b/ui/src/router/modules/application.ts index 8f3a766b0..75a91c3fe 100644 --- a/ui/src/router/modules/application.ts +++ b/ui/src/router/modules/application.ts @@ -7,6 +7,7 @@ const applicationRouter = { menu: true, permission: [ RoleConst.ADMIN, + RoleConst.USER, RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, PermissionConst.APPLICATION_READ.getWorkspacePermissionWorkspaceManageRole, PermissionConst.APPLICATION_READ.getWorkspacePermission, diff --git a/ui/src/router/modules/knowledge.ts b/ui/src/router/modules/knowledge.ts index d3d71c35b..43ea7fa46 100644 --- a/ui/src/router/modules/knowledge.ts +++ b/ui/src/router/modules/knowledge.ts @@ -7,6 +7,7 @@ const ModelRouter = { menu: true, permission: [ RoleConst.ADMIN, + RoleConst.USER, RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, PermissionConst.KNOWLEDGE_READ.getWorkspacePermission, PermissionConst.KNOWLEDGE_READ.getWorkspacePermissionWorkspaceManageRole, diff --git a/ui/src/router/modules/model.ts b/ui/src/router/modules/model.ts index 72c7461b7..a683842ce 100644 --- a/ui/src/router/modules/model.ts +++ b/ui/src/router/modules/model.ts @@ -7,6 +7,7 @@ const ModelRouter = { menu: true, permission: [ RoleConst.ADMIN, + RoleConst.USER, RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, PermissionConst.MODEL_READ.getWorkspacePermission, PermissionConst.MODEL_READ.getWorkspacePermissionWorkspaceManageRole, diff --git a/ui/src/router/modules/system.ts b/ui/src/router/modules/system.ts index 6d5a04440..7ecda5350 100644 --- a/ui/src/router/modules/system.ts +++ b/ui/src/router/modules/system.ts @@ -18,7 +18,14 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', - permission: [RoleConst.ADMIN, EditionConst.IS_EE], + permission: [ + new ComplexPermission( + [RoleConst.ADMIN,], + [PermissionConst.USER_READ], + [EditionConst.IS_EE], + 'OR', + ), + ], }, component: () => import('@/views/system/user-manage/index.vue'), }, @@ -55,8 +62,8 @@ const systemRouter = { parentName: 'system', permission: [ new ComplexPermission( - [RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, RoleConst.ADMIN], - [PermissionConst.WORKSPACE_WORKSPACE_READ], + [RoleConst.WORKSPACE_MANAGE, RoleConst.ADMIN], + [PermissionConst.WORKSPACE_WORKSPACE_READ.getWorkspacePermissionWorkspaceManageRole], [EditionConst.IS_EE], 'OR', ), diff --git a/ui/src/router/modules/tool.ts b/ui/src/router/modules/tool.ts index 5d838991b..7623a0c8b 100644 --- a/ui/src/router/modules/tool.ts +++ b/ui/src/router/modules/tool.ts @@ -7,6 +7,7 @@ const ModelRouter = { menu: true, permission: [ RoleConst.ADMIN, + RoleConst.USER, RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, PermissionConst.TOOL_READ.getWorkspacePermission, PermissionConst.TOOL_READ.getWorkspacePermissionWorkspaceManageRole, diff --git a/ui/src/utils/permission/data.ts b/ui/src/utils/permission/data.ts index 41450b476..774031104 100644 --- a/ui/src/utils/permission/data.ts +++ b/ui/src/utils/permission/data.ts @@ -123,20 +123,20 @@ const PermissionConst = { APPLICATION_TO_CHAT:new Permission('APPLICATION:READ+TO_CHAT'), - APPLICATION_OVERVIEW_READ:new Permission('OVERVIEW:READ'), - APPLICATION_OVERVIEW_EMBEDDED:new Permission('OVERVIEW:READ'), - APPLICATION_OVERVIEW_ACCESS:new Permission('OVERVIEW:READ'), - APPLICATION_OVERVIEW_DISPLAY:new Permission('OVERVIEW:READ'), - APPLICATION_OVERVIEW_API_KEY:new Permission('OVERVIEW:READ'), - APPLICATION_OVERVIEW_PUBLIC:new Permission('OVERVIEW:READ'), + APPLICATION_OVERVIEW_READ:new Permission('APPLICATION_OVERVIEW:READ'), + APPLICATION_OVERVIEW_EMBEDDED:new Permission('APPLICATION_OVERVIEW:READ+EMBED'), + APPLICATION_OVERVIEW_ACCESS:new Permission('APPLICATION_OVERVIEW:READ+ACCESS'), + APPLICATION_OVERVIEW_DISPLAY:new Permission('APPLICATION_OVERVIEW:READ+DISPLAY'), + 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_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_ACCESS_READ:new Permission('APPLICATION_CHAT_LOG:READ'), - APPLICATION_ACCESS_EDIT:new Permission('APPLICATION_CHAT_LOG:READ+EDIT'), + APPLICATION_ACCESS_READ:new Permission('APPLICATION_ACCESS:READ'), + APPLICATION_ACCESS_EDIT:new Permission('APPLICATION_ACCESS:READ+EDIT'), SHARED_TOOL_READ:new Permission('SYSTEM_TOOL:READ'), SHARED_TOOL_CREATE:new Permission('SYSTEM_TOOL:READ+CREATE'), diff --git a/ui/src/views/application-overview/index.vue b/ui/src/views/application-overview/index.vue index ee3589deb..9da132443 100644 --- a/ui/src/views/application-overview/index.vue +++ b/ui/src/views/application-overview/index.vue @@ -52,11 +52,6 @@ :active-text="$t('views.applicationOverview.appInfo.openText')" :inactive-text="$t('views.applicationOverview.appInfo.closeText')" :before-change="() => changeState(accessToken.is_active)" - v-hasPermission="[ - RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - RoleConst.USER.getWorkspaceRole, - PermissionConst.APPLICATION_EDIT.getWorkspacePermission, - ]" /> @@ -98,11 +93,7 @@ {{ $t('views.applicationOverview.appInfo.embedInWebsite') }} @@ -110,11 +101,7 @@ {{ $t('views.applicationOverview.appInfo.accessControl') }} @@ -122,11 +109,7 @@ {{ $t('views.applicationOverview.appInfo.displaySetting') }} @@ -169,11 +152,7 @@
{{ $t('views.applicationOverview.appInfo.apiKey') }}(() => { + return 'workspace' +}) +const permissionPrecise = computed(() => { + return permissionMap['application'][apiType.value] +}) + +const { user, application } = useStore() const { params: { id }, } = route as any diff --git a/ui/src/views/application/ApplicationAccess.vue b/ui/src/views/application/ApplicationAccess.vue index 612d6dfc8..67967dca1 100644 --- a/ui/src/views/application/ApplicationAccess.vue +++ b/ui/src/views/application/ApplicationAccess.vue @@ -28,15 +28,11 @@ v-model="item.isActive" @change="changeStatus(item.key, item.isActive)" :disabled="!item.exists" - v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, - RoleConst.USER.getWorkspaceRole, - PermissionConst.APPLICATION_ACCESS_EDIT.getWorkspacePermission]" + v-if="permissionPrecise.access_edit(id)" /> {{ $t('views.application.applicationAccess.setting') }} @@ -50,14 +46,22 @@