feat: Button Permission

This commit is contained in:
zhangzhanwei 2025-06-18 20:22:33 +08:00 committed by zhanweizhang7
parent d9bd35e664
commit 8048e73741
10 changed files with 144 additions and 41 deletions

View File

@ -1,7 +1,7 @@
const ModelRouter = {
path: '/model',
name: 'model',
meta: { title: 'views.model.title', permission: 'MODEL:READ' },
meta: { title: 'views.model.title' },
redirect: '/model',
component: () => import('@/layout/layout-template/SimpleLayout.vue'),
children: [

View File

@ -27,7 +27,6 @@ import { Permission, Role, Edition } from '@/utils/permission/type'
const PermissionConst = {
USER_READ: new Permission('USER:READ'),
USER_CREATE: new Permission('USER:CREATE'),
APPLICATION_OVERVIEW_READ: new Permission('APPLICATION_OVERVIEW_READ'),
KNOWLEDGE_READ: new Permission('KNOWLEDGE:READ'),
KNOWLEDGE_CREATE: new Permission('KNOWLEDGE:READ+CREATE'),
@ -57,6 +56,57 @@ const PermissionConst = {
MODEL_EDIT:new Permission('MODEL:READ+EDIT'),
MODEL_DELETE:new Permission('MODEL:READ+DELETE'),
APPLICATION_READ:new Permission('APPLICATION:READ'),
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'),
APPLICATION_OVERVIEW_DISPLAY:new Permission('OVERVIEW:READ'),
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_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'),
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'),
SHARED_TOOL_DELETE:new Permission('SYSTEM_TOOL:READ+DELETE'),
SHARED_TOOL_IMPORT:new Permission('SYSTEM_TOOL:READ+IMPORT'),
SHARED_TOOL_EXPORT:new Permission('SYSTEM_TOOL:READ+EXPORT'),
SHARED_TOOL_DEBUG:new Permission('SYSTEM_TOOL:READ+DEBUG'),
TOOL_CREATE:new Permission('TOOL:READ+CREATE'),
TOOL_EDIT:new Permission('TOOL:READ+EDIT'),
TOOL_READ:new Permission('TOOL:READ'),
TOOL_DELETE:new Permission('TOOL:READ+DELETE'),
TOOL_DEBUG:new Permission('TOOL:READ+DEBUG'),
TOOL_IMPORT:new Permission('TOOL:READ+IMPORT'),
TOOL_EXPORT:new Permission('TOOL:READ+EXPORT'),
RESOURCE_TOOL_CREATE:new Permission('SYSTEM_RES_TOOL:READ+CREATE'),
RESOURCE_TOOL_EDIT:new Permission('SYSTEM_RES_TOOL:READ+EDIT'),
RESOURCE_TOOL_READ:new Permission('SYSTEM_RES_TOOL:READ'),
RESOURCE_TOOL_DELETE:new Permission('SYSTEM_RES_TOOL:READ+DELETE'),
RESOURCE_TOOL_DEBUG:new Permission('SYSTEM_RES_TOOL:READ+DEBUG'),
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'),

View File

@ -53,6 +53,7 @@
: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,PermissionConst.APPLICATION_EDIT.getWorkspacePermission]"
/>
</div>
@ -91,15 +92,21 @@
<AppIcon iconName="app-create-chat" class="mr-4"></AppIcon>
{{ $t('views.application.operation.toChat') }}
</el-button>
<el-button :disabled="!accessToken?.is_active" @click="openDialog">
<el-button :disabled="!accessToken?.is_active" @click="openDialog"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_OVERVIEW_EMBEDDED.getWorkspacePermission]"
>
<AppIcon iconName="app-export" class="mr-4"></AppIcon>
{{ $t('views.applicationOverview.appInfo.embedInWebsite') }}
</el-button>
<el-button @click="openLimitDialog">
<el-button @click="openLimitDialog"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_OVERVIEW_ACCESS.getWorkspacePermission]"
>
<el-icon class="mr-4"><Lock /></el-icon>
{{ $t('views.applicationOverview.appInfo.accessControl') }}
</el-button>
<el-button @click="openDisplaySettingDialog">
<el-button @click="openDisplaySettingDialog"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_OVERVIEW_DISPLAY.getWorkspacePermission]"
>
<el-icon class="mr-4"><Setting /></el-icon>
{{ $t('views.applicationOverview.appInfo.displaySetting') }}
</el-button>
@ -139,7 +146,9 @@
</div>
</div>
<div>
<el-button @click="openAPIKeyDialog">
<el-button @click="openAPIKeyDialog"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_OVERVIEW_API_KEY.getWorkspacePermission]"
>
<el-icon class="mr-4"><Key /></el-icon>
{{ $t('views.applicationOverview.appInfo.apiKey') }}</el-button
>
@ -215,6 +224,8 @@ import { copyClick } from '@/utils/clipboard'
import { isAppIcon } from '@/utils/common'
import useStore from '@/stores'
import { t } from '@/locales'
import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index'
const { user, application } = useStore()
const route = useRoute()
const {

View File

@ -28,9 +28,12 @@
v-model="item.isActive"
@change="changeStatus(item.key, item.isActive)"
:disabled="!item.exists"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_ACCESS_EDIT.getWorkspacePermission]"
/>
<el-divider direction="vertical" />
<el-button class="mr-4" @click="openDrawer(item.key)">{{
<el-button class="mr-4" @click="openDrawer(item.key)"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_ACCESS_EDIT.getWorkspacePermission]"
>{{
$t('views.application.applicationAccess.setting')
}}</el-button>
</div>
@ -49,6 +52,8 @@ import applicationApi from '@/api/application/application'
import { MsgSuccess } from '@/utils/message'
import { useRoute } from 'vue-router'
import { t } from '@/locales'
import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index'
//
const platforms = reactive([

View File

@ -4,7 +4,9 @@
<h3>
{{ $t('common.setting') }}
</h3>
<el-button type="primary" @click="submit(applicationFormRef)" :disabled="loading">
<el-button type="primary" @click="submit(applicationFormRef)" :disabled="loading"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_OVERVIEW_PUBLIC.getWorkspacePermission]"
>
{{ $t('views.application.buttons.publish') }}
</el-button>
</div>
@ -439,6 +441,8 @@ import useStore from '@/stores'
import { t } from '@/locales'
import TTSModeParamSettingDialog from './component/TTSModeParamSettingDialog.vue'
import ReasoningParamSettingDialog from './component/ReasoningParamSettingDialog.vue'
import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index'
const { knowledge, model, application } = useStore()

View File

@ -42,7 +42,8 @@
</el-select>
</div>
<el-dropdown trigger="click">
<el-button type="primary" class="ml-8">
<el-button type="primary" class="ml-8"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_EDIT.getWorkspacePermission]">
{{ $t('common.create') }}
<el-icon class="el-icon--right">
<arrow-down />
@ -217,11 +218,15 @@
<AppIcon iconName="app-create-chat"></AppIcon>
{{ $t('views.application.operation.toChat') }}
</el-dropdown-item>
<el-dropdown-item @click.stop="settingApplication(item)">
<el-dropdown-item @click.stop="settingApplication(item)"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_EDIT.getWorkspacePermission],'OR')"
>
<el-icon><Setting /></el-icon>
{{ $t('common.setting') }}
</el-dropdown-item>
<el-dropdown-item divided @click.stop="exportApplication(item)">
<el-dropdown-item divided @click.stop="exportApplication(item)"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_EXPORT.getWorkspacePermission],'OR')"
>
<AppIcon iconName="app-export"></AppIcon>
{{ $t('common.export') }}
</el-dropdown-item>
@ -229,6 +234,7 @@
divided
icon="Delete"
@click.stop="deleteApplication(item)"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_DELETE.getWorkspacePermission],'OR')"
>{{ $t('common.delete') }}</el-dropdown-item
>
</el-dropdown-menu>
@ -262,6 +268,8 @@ import { t } from '@/locales'
import { useRouter } from 'vue-router'
import { isWorkFlow } from '@/utils/application'
import { dateFormat } from '@/utils/time'
import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index'
const router = useRouter()
const { folder, application, user } = useStore()

View File

@ -38,12 +38,19 @@
clearable
/>
<div style="display: flex; align-items: center" class="float-right">
<el-button @click="dialogVisible = true">{{
$t('views.chatLog.buttons.clearStrategy')
}}</el-button>
<el-button @click="exportLog">{{ $t('common.export') }}</el-button>
<el-button @click="dialogVisible = true"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_CHAT_LOG_POLICY.getWorkspacePermission]"
>
{{$t('views.chatLog.buttons.clearStrategy')}}
</el-button>
<el-button @click="exportLog"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_CHAT_LOG_EXPORT.getWorkspacePermission]"
>
{{ $t('common.export') }}
</el-button>
<el-button @click="openDocumentDialog" :disabled="multipleSelection.length === 0"
>{{ $t('views.chatLog.addToKnowledge') }}
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.APPLICATION_CHAT_LOG_EXPORT.getWorkspacePermission]"
>{{ $t('views.chatLog.addToKnowledge') }}
</el-button>
</div>
</div>
@ -278,6 +285,8 @@ import type { Dict } from '@/api/type/common'
import { t } from '@/locales'
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'
const { application, chatLog, document, user } = useStore()
const route = useRoute()

View File

@ -227,10 +227,6 @@
<el-button
text
@click.stop
v-hasPermission="[
RoleConst.ADMIN.getWorkspaceRole,
PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermission,
]"
>
<el-icon>
<MoreFilled />
@ -241,10 +237,14 @@
<el-dropdown-item
icon="Refresh"
@click.stop="syncKnowledge(item)"
v-if="item.type === 1"
v-if="item.type === 1 ||
hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_SYNC.getWorkspacePermission],'OR')
"
>{{ $t('views.knowledge.setting.sync') }}
</el-dropdown-item>
<el-dropdown-item @click.stop="reEmbeddingKnowledge(item)">
<el-dropdown-item @click.stop="reEmbeddingKnowledge(item)"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_VECTOR.getWorkspacePermission],'OR')"
>
<AppIcon iconName="app-vectorization"></AppIcon>
{{ $t('views.knowledge.setting.vectorization') }}
</el-dropdown-item>
@ -252,28 +252,36 @@
<el-dropdown-item
icon="Connection"
@click.stop="openGenerateDialog(item)"
>{{ $t('views.document.generateQuestion.title') }}</el-dropdown-item
>
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_PROBLEM_CREATE.getWorkspacePermission],'OR')"
>{{ $t('views.document.generateQuestion.title') }}
</el-dropdown-item>
<el-dropdown-item
icon="Setting"
@click.stop="
router.push({
path: `/knowledge/${item.id}/${currentFolder.value}/setting`,
})
"
})"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermission],'OR')"
>
{{ $t('common.setting') }}</el-dropdown-item
{{ $t('common.setting') }}
</el-dropdown-item
>
<el-dropdown-item @click.stop="exportKnowledge(item)"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_EXPORT.getWorkspacePermission],'OR')"
>
<el-dropdown-item @click.stop="exportKnowledge(item)">
<AppIcon iconName="app-export"></AppIcon
>{{ $t('views.document.setting.export') }} Excel</el-dropdown-item
>{{ $t('views.document.setting.export') }} Excel
</el-dropdown-item>
<el-dropdown-item @click.stop="exportZipKnowledge(item)"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_EXPORT.getWorkspacePermission],'OR')"
>
<el-dropdown-item @click.stop="exportZipKnowledge(item)">
<AppIcon iconName="app-export"></AppIcon
>{{ $t('views.document.setting.export') }} ZIP</el-dropdown-item
>
<el-dropdown-item icon="Delete" @click.stop="deleteKnowledge(item)">{{
$t('common.delete')
<el-dropdown-item icon="Delete" @click.stop="deleteKnowledge(item)"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_EXPORT.getWorkspacePermission],'OR')"
>
{{$t('common.delete')
}}</el-dropdown-item>
</el-dropdown-menu>
</template>

View File

@ -75,11 +75,11 @@
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_EDIT.getWorkspacePermission],'OR')"
icon="EditPen"
:disabled="!is_permisstion"
text
@click.stop="openEditModel"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_EDIT.getWorkspacePermission]"
>
{{ $t('common.modify') }}
</el-dropdown-item>
@ -89,12 +89,12 @@
currentModel.model_type === 'TTS' ||
currentModel.model_type === 'LLM' ||
currentModel.model_type === 'IMAGE' ||
currentModel.model_type === 'TTI'
currentModel.model_type === 'TTI' ||
hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_EDIT.getWorkspacePermission],'OR')
"
:disabled="!is_permisstion"
icon="Setting"
@click.stop="openParamSetting"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_EDIT.getWorkspacePermission]"
>
{{ $t('views.model.modelForm.title.paramSetting') }}
</el-dropdown-item>
@ -104,7 +104,7 @@
:disabled="!is_permisstion"
text
@click.stop="deleteModel"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_DELETE.getWorkspacePermission]"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_DELETE.getWorkspacePermission],'OR')"
>
{{ $t('common.delete') }}
</el-dropdown-item>
@ -127,7 +127,8 @@ import {modelType} from '@/enums/model'
import useStore from '@/stores'
import ParamSettingDialog from './ParamSettingDialog.vue'
import {t} from '@/locales'
import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data'
import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission'
const props = defineProps<{
model: Model

View File

@ -45,7 +45,9 @@
</el-select>
</div>
<el-dropdown trigger="click">
<el-button type="primary" class="ml-8">
<el-button type="primary" class="ml-8"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.TOOL_CREATE.getWorkspacePermission]"
>
{{ $t('common.create') }}
<el-icon class="el-icon--right">
<arrow-down />
@ -175,6 +177,7 @@
:before-change="() => changeState(item)"
size="small"
class="mr-4"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.TOOL_EDIT.getWorkspacePermission]"
/>
<el-divider direction="vertical" />
<el-dropdown trigger="click">
@ -186,7 +189,7 @@
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
v-if="!item.template_id"
v-if="!item.template_id&&hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.TOOL_EDIT.getWorkspacePermission],'OR')"
:disabled="!canEdit(item)"
@click.stop="openCreateDialog(item)"
>
@ -197,7 +200,7 @@
</el-dropdown-item>
<el-dropdown-item
:disabled="!canEdit(item)"
v-if="!item.template_id"
v-if="!item.template_id&&hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.TOOL_EXPORT.getWorkspacePermission],'OR')"
@click.stop="copyTool(item)"
>
<AppIcon iconName="app-copy"></AppIcon>
@ -212,7 +215,7 @@
{{ $t('common.param.initParam') }}
</el-dropdown-item>
<el-dropdown-item
v-if="!item.template_id"
v-if="!item.template_id&&hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.TOOL_EXPORT.getWorkspacePermission],'OR')"
:disabled="!canEdit(item)"
@click.stop="exportTool(item)"
>
@ -220,6 +223,7 @@
{{ $t('common.export') }}
</el-dropdown-item>
<el-dropdown-item
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.TOOL_DELETE.getWorkspacePermission],'OR')"
:disabled="!canEdit(item)"
divided
@click.stop="deleteTool(item)"
@ -257,6 +261,9 @@ import { t } from '@/locales'
import { isAppIcon } from '@/utils/common'
import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message'
import SharedWorkspace from '@/views/shared/tool-shared/SharedWorkspace.vue'
import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index'
const { folder, user } = useStore()