From ec6664061608f3879c19edae1c3ab56146b2b066 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Thu, 19 Jun 2025 20:07:40 +0800 Subject: [PATCH] feat: Button Permission by workspace role (#3317) Co-authored-by: zhangzhanwei --- ui/src/router/modules/3tool.ts | 2 +- ui/src/router/modules/system.ts | 12 +++- ui/src/utils/permission/data.ts | 71 ++++++++++++++++--- ui/src/utils/permission/index.ts | 3 +- ui/src/views/document/index.vue | 31 +++++--- ui/src/views/knowledge/index.vue | 12 +--- ui/src/views/role/component/Member.vue | 13 +++- ui/src/views/role/index.vue | 7 +- ui/src/views/system-chat-user/group/index.vue | 34 +++++++-- .../system-chat-user/user-manage/index.vue | 32 +++++++-- ui/src/views/tool/ToolFormDrawer.vue | 18 +++-- ui/src/views/workspace/component/Member.vue | 9 ++- ui/src/views/workspace/index.vue | 6 +- 13 files changed, 192 insertions(+), 58 deletions(-) diff --git a/ui/src/router/modules/3tool.ts b/ui/src/router/modules/3tool.ts index e9e050811..f275f0c48 100644 --- a/ui/src/router/modules/3tool.ts +++ b/ui/src/router/modules/3tool.ts @@ -1,7 +1,7 @@ const ModelRouter = { path: '/tool', name: 'tool', - meta: { title: 'views.tool.title', permission: 'TOOL:READ' }, + meta: { title: 'views.tool.title' }, redirect: '/tool', component: () => import('@/layout/layout-template/SimpleLayout.vue'), children: [ diff --git a/ui/src/router/modules/system.ts b/ui/src/router/modules/system.ts index a2f29892f..e96a4ff67 100644 --- a/ui/src/router/modules/system.ts +++ b/ui/src/router/modules/system.ts @@ -1,4 +1,5 @@ import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data' +import { ComplexPermission } from '@/utils/permission/type' const systemRouter = { path: '/system', name: 'system', @@ -16,6 +17,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', + permission: [RoleConst.ADMIN,EditionConst.IS_EE], }, component: () => import('@/views/user-manage/index.vue'), }, @@ -78,7 +80,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', - permission: [EditionConst.IS_EE], + permission:[new ComplexPermission([RoleConst.ADMIN,RoleConst.WORKSPACE_MANAGE.getWorkspaceRole],[PermissionConst.ROLE_READ],[EditionConst.IS_EE],'OR'),], }, component: () => import('@/views/role/index.vue'), }, @@ -92,7 +94,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', - permission: [EditionConst.IS_EE], + permission:[new ComplexPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.ADMIN],[PermissionConst.WORKSPACE_WORKSPACE_READ],[EditionConst.IS_EE],'OR'),], }, component: () => import('@/views/workspace/index.vue'), }, @@ -154,7 +156,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', - permission: [EditionConst.IS_PE, EditionConst.IS_EE], + permission:[new ComplexPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.ADMIN],[PermissionConst.WORKSPACE_USER_GROUP_READ],[EditionConst.IS_EE,EditionConst.IS_PE],'OR'),], }, children: [ { @@ -165,6 +167,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', + permission:[new ComplexPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.ADMIN],[PermissionConst.WORKSPACE_CHAT_USER_READ],[EditionConst.IS_EE,EditionConst.IS_PE],'OR'),], }, component: () => import('@/views/system-chat-user/user-manage/index.vue'), }, @@ -176,6 +179,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', + permission:[new ComplexPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.ADMIN],[PermissionConst.WORKSPACE_USER_GROUP_READ],[EditionConst.IS_EE,EditionConst.IS_PE],'OR'),], }, component: () => import('@/views/system-chat-user/group/index.vue'), }, @@ -187,6 +191,8 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', + permission:[new ComplexPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,RoleConst.ADMIN], + [PermissionConst.CHAT_USER_AUTH_READ],[EditionConst.IS_EE,EditionConst.IS_PE],'OR'),], }, component: () => import('@/views/system-chat-user/authentication/index.vue'), }, diff --git a/ui/src/utils/permission/data.ts b/ui/src/utils/permission/data.ts index 3040ba8c5..8b26e1a29 100644 --- a/ui/src/utils/permission/data.ts +++ b/ui/src/utils/permission/data.ts @@ -26,7 +26,61 @@ import { Permission, Role, Edition } from '@/utils/permission/type' // CLEAR_POLICY = "READ+CLEAR_POLICY" const PermissionConst = { USER_READ: new Permission('USER:READ'), - USER_CREATE: new Permission('USER:CREATE'), + USER_CREATE: new Permission('USER:READ+CREATE'), + USER_EDIT: new Permission('USER:READ+EDIT'), + USER_DELETE: new Permission('USER:READ+DELETE'), + + WORKSPACE_USER_RESOURCE_PERMISSION_READ: new Permission('WORKSPACE_USER_RESOURCE_PERMISSION:READ'), + WORKSPACE_USER_RESOURCE_PERMISSION_EDIT: new Permission('WORKSPACE_USER_RESOURCE_PERMISSION:READ+EDIT'), + + WORKSPACE_ROLE_READ: new Permission('WORKSPACE_ROLE:READ'), + WORKSPACE_ROLE_ADD_MEMBER: new Permission('WORKSPACE_ROLE:READ+ADD_MEMBER'), + WORKSPACE_ROLE_REMOVE_MEMBER: new Permission('WORKSPACE_ROLE:READ+REMOVE_MEMBER'), + + WORKSPACE_READ: new Permission('WORKSPACE:READ'), + WORKSPACE_CREATE: new Permission('WORKSPACE:READ+CREATE'), + WORKSPACE_EDIT: new Permission('WORKSPACE:READ+EDIT'), + WORKSPACE_DELETE: new Permission('WORKSPACE:READ+DELETE'), + WORKSPACE_ADD_MEMBER: new Permission('WORKSPACE:READ+ADD_MEMBER'), + WORKSPACE_REMOVE_MEMBER: new Permission('WORKSPACE:READ+REMOVE_MEMBER'), + + WORKSPACE_WORKSPACE_READ: new Permission('WORKSPACE_WORKSPACE:READ'), + WORKSPACE_WORKSPACE_ADD_MEMBER: new Permission('WORKSPACE:READ+ADD_MEMBER'), + WORKSPACE_WORKSPACE_REMOVE_MEMBER: new Permission('WORKSPACE:READ+REMOVE_MEMBER'), + + WORKSPACE_CHAT_USER_READ: new Permission('WORKSPACE_CHAT_USER:READ'), + WORKSPACE_CHAT_USER_CREATE: new Permission('WORKSPACE_CHAT_USER:READ+CREATE'), + WORKSPACE_CHAT_USER_EDIT: new Permission('WORKSPACE_CHAT_USER:READ+EDIT'), + WORKSPACE_CHAT_USER_DELETE: new Permission('WORKSPACE_CHAT_USER:READ+DELETE'), + WORKSPACE_CHAT_USER_GROUP: new Permission('WORKSPACE_CHAT_USER:READ+USER_GROUP'), + + WORKSPACE_USER_GROUP_READ: new Permission('WORKSPACE_USER_GROUP:READ'), + WORKSPACE_USER_GROUP_CREATE: new Permission('WORKSPACE_USER_GROUP:READ+CREATE'), + WORKSPACE_USER_GROUP_EDIT: new Permission('WORKSPACE_USER_GROUP:READ+EDIT'), + WORKSPACE_USER_GROUP_DELETE: new Permission('WORKSPACE_USER_GROUP:READ+DELETE'), + WORKSPACE_USER_GROUP_ADD_MEMBER: new Permission('WORKSPACE_USER_GROUP:READ+ADD_MEMBER'), + WORKSPACE_USER_GROUP_REMOVE_MEMBER: new Permission('WORKSPACE_USER_GROUP:READ+REMOVE_MEMBER'), + + CHAT_USER_AUTH_READ:new Permission('CHAT_USER_AUTH:READ'), + CHAT_USER_AUTH_EDIT:new Permission('CHAT_USER_AUTH:READ+EDIT'), + + CHAT_USER_READ: new Permission('CHAT_USER:READ'), + CHAT_USER_CREATE: new Permission('CHAT_USER:READ+CREATE'), + CHAT_USER_SYNC: new Permission('CHAT_USER:READ+SYNC'), + CHAT_USER_EDIT: new Permission('CHAT_USER:READ+EDIT'), + CHAT_USER_DELETE: new Permission('CHAT_USER:READ+DELETE'), + CHAT_USER_GROUP: new Permission('CHAT_USER:READ+USER_GROUP'), + + USER_GROUP_READ: new Permission('USER_GROUP:READ'), + + + ROLE_READ: new Permission('ROLE:READ'), + ROLE_CREATE: new Permission('ROLE:READ'), + ROLE_EDIT: new Permission('ROLE:READ'), + ROLE_DELETE: new Permission('ROLE:READ'), + ROLE_ADD_MEMBER: new Permission('ROLE:READ'), + ROLE_REMOVE_MEMBER: new Permission('ROLE:READ'), + KNOWLEDGE_READ: new Permission('KNOWLEDGE:READ'), KNOWLEDGE_CREATE: new Permission('KNOWLEDGE:READ+CREATE'), @@ -38,6 +92,7 @@ const PermissionConst = { KNOWLEDGE_DOCUMENT_READ:new Permission('KNOWLEDGE_DOCUMENT:READ'), KNOWLEDGE_DOCUMENT_CREATE:new Permission('KNOWLEDGE_DOCUMENT:READ+CREATE'), + KNOWLEDGE_DOCUMENT_DELETE:new Permission('KNOWLEDGE_DOCUMENT:READ+DELETE'), KNOWLEDGE_DOCUMENT_EDIT:new Permission('KNOWLEDGE_DOCUMENT:READ+EDIT'), KNOWLEDGE_DOCUMENT_SYNC:new Permission('KNOWLEDGE_DOCUMENT:READ+SYNC'), KNOWLEDGE_DOCUMENT_MIGRATE:new Permission('KNOWLEDGE_DOCUMENT:READ+MIGRATE'), @@ -60,7 +115,7 @@ const PermissionConst = { APPLICATION_EXPORT:new Permission('APPLICATION:READ+EXPORT'), APPLICATION_DELETE:new Permission('APPLICATION:READ+DELETE'), APPLICATION_EDIT:new Permission('APPLICATION:READ+EDIT'), - + APPLICATION_OVERVIEW_READ:new Permission('OVERVIEW:READ'), APPLICATION_OVERVIEW_EMBEDDED:new Permission('OVERVIEW:READ'), APPLICATION_OVERVIEW_ACCESS:new Permission('OVERVIEW:READ'), @@ -68,11 +123,11 @@ const PermissionConst = { APPLICATION_OVERVIEW_API_KEY:new Permission('OVERVIEW:READ'), APPLICATION_OVERVIEW_PUBLIC:new Permission('OVERVIEW:READ'), - APPLICATION_CHAT_LOG:new Permission('APPLICATION_CHAT_LOG:READ'), - APPLICATION_CHAT_LOG_ANNOTATION:new Permission('APPLICATION_CHAT_LOG:READ+ANNOTATION'), + 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'), @@ -100,10 +155,8 @@ const PermissionConst = { RESOURCE_TOOL_IMPORT:new Permission('SYSTEM_RES_TOOL:READ+IMPORT'), RESOURCE_TOOL_EXPORT:new Permission('SYSTEM_RES_TOOL:READ+EXPORT'), - WORKSPACE_ROLE_READ:new Permission('WORKSAPCE_ROLE:READ'), - WORKSPACE_ROLE_ADD_MEMBER:new Permission('WORKSAPCE_ROLE:READ+ADD_MEMBER'), - WORKSPACE_ROLE_REMOVE_MEMBER:new Permission('WORKSAPCE_ROLE:READ+REMOVE_MEMBER'), - + + diff --git a/ui/src/utils/permission/index.ts b/ui/src/utils/permission/index.ts index d6a56b049..2a72684b3 100644 --- a/ui/src/utils/permission/index.ts +++ b/ui/src/utils/permission/index.ts @@ -45,7 +45,8 @@ const hasPermissionChild = ( const roleOk = roleList.some((r) => role.includes(isFunction(r) ? (r as CRF)().toString() : r.toString()), ) - const editionOK = permission.editionList.includes(edition.toString()) + const editionList= permission.editionList + const editionOK = permission.editionList.length>0?editionList.some(e=>edition.toString()==e.toString()):true return permission.compare === 'AND' ? permissionOk && roleOk && editionOK diff --git a/ui/src/views/document/index.vue b/ui/src/views/document/index.vue index aac66d5c0..a10cf1330 100644 --- a/ui/src/views/document/index.vue +++ b/ui/src/views/document/index.vue @@ -69,10 +69,6 @@ @@ -81,6 +77,7 @@ {{ $t('common.setting') }} @@ -88,7 +85,8 @@ divided @click="syncMulDocument" :disabled="multipleSelection.length === 0" - v-if="knowledgeDetail.type === 1" + v-if="knowledgeDetail.type === 1 && + hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_SYNC.getWorkspacePermission],'OR')" >{{ $t('views.document.syncDocument') }} {{ $t('views.document.setting.cancelGenerateQuestion') }} - + {{ $t('views.document.generateQuestion.title') }} - + {{ $t('views.document.setting.migration') }} - + {{ $t('views.document.setting.export') }} Excel - + {{ $t('views.document.setting.export') }} Zip - + {{ $t('common.delete') }} diff --git a/ui/src/views/knowledge/index.vue b/ui/src/views/knowledge/index.vue index aa5aab016..0c485d29f 100644 --- a/ui/src/views/knowledge/index.vue +++ b/ui/src/views/knowledge/index.vue @@ -238,16 +238,8 @@ {{ $t('views.knowledge.setting.sync') }}
- + {{ $t('views.role.member.add') }}