Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions ui/src/permission/modules/tool/system.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,53 @@ const system = {
isShare: () => canSys(P.SHARED_TOOL_READ),

// —— 工具资源 ——
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)编辑权限
* */
edit: () => canSys(P.RESOURCE_TOOL_EDIT),
switch: () => canSys(P.RESOURCE_TOOL_EDIT),
debug: () => canSys(P.RESOURCE_TOOL_EDIT),
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)删除权限
* */
delete: () => canSys(P.RESOURCE_TOOL_DELETE),
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)发布权限
* */
publish: () => canSys(P.RESOURCE_TOOL_PUBLISH),
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)导出权限
* */
export: () => canSys(P.RESOURCE_TOOL_EXPORT),
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)资源授权权限
* */
auth: () => canSys(P.RESOURCE_TOOL_AUTH),
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)查看关联资源权限
* */
relateMap: () => canSys(P.RESOURCE_TOOL_RELATE_RESOURCE_VIEW),
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)查看执行记录权限
* */
record: () => canSys(P.RESOURCE_TOOL_EXECUTE_RECORD),

// —— 触发器 ——
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)查看触发器权限
* */
triggerRead: () => canSys(P.RESOURCE_TOOL_TRIGGER_READ),
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)创建触发器权限
* */
triggerCreate: () => canSys(P.RESOURCE_TOOL_TRIGGER_CREATE),
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)编辑触发器权限
* */
triggerEdit: () => canSys(P.RESOURCE_TOOL_TRIGGER_EDIT),
/**
* 系统「工具资源管理」(系统 > 资源管理 > 工具)删除触发器权限
* */
triggerDelete: () => canSys(P.RESOURCE_TOOL_TRIGGER_DELETE),
}

Expand Down
66 changes: 66 additions & 0 deletions ui/src/permission/modules/tool/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,37 +5,103 @@ import { PermissionConstants as P } from '../../core'

const workspace = {
// —— 工作空间级 ——
/**
* 工作空间「工具」只读权限
*/
read: () => can(P.TOOL_READ),
isShare: () => can(P.TOOL_READ),
/**
* 工作空间「工具」创建权限
*/
create: () => can(P.TOOL_CREATE),
/**
* 工作空间「工具」批量删除权限
*/
batchDelete: () => can(P.TOOL_BATCH_DELETE),
/**
* 工作空间「工具」批量移动权限
*/
batchMove: () => can(P.TOOL_BATCH_MOVE),
/**
* 工作空间「工具」导入权限
*/
import: () => can(P.TOOL_IMPORT),
debug: () => false,
authToWorkspace: () => false,

// —— 工具资源级 ——
/**
* 工作空间「工具」编辑权限
*/
edit: (id: string) => canRes(P.TOOL_EDIT, id),
switch: (id: string) => canRes(P.TOOL_EDIT, id),
/**
* 工作空间「工具」复制权限
*/
copy: (id: string) => canRes(P.TOOL_EDIT, id),
/**
* 工作空间「工具」删除权限
*/
delete: (id: string) => canRes(P.TOOL_DELETE, id),
/**
* 工作空间「工具」发布权限
*/
publish: (id: string) => canRes(P.TOOL_PUBLISH, id),
/**
* 工作空间「工具」导出权限
*/
export: (id: string) => canRes(P.TOOL_EXPORT, id),
/**
* 工作空间「工具」资源授权权限
*/
auth: (id: string) => canRes(P.TOOL_RESOURCE_AUTHORIZATION, id),
/**
* 工作空间「工具」查看关联资源权限
*/
relateMap: (id: string) => canRes(P.TOOL_RELATE_RESOURCE_VIEW, id),
/**
* 工作空间「工具」查看执行记录权限
*/
record: (id: string) => canRes(P.TOOL_EXECUTE_RECORD, id),

// —— 触发器 ——
/**
* 工作空间「工具」查看触发器权限
*/
triggerRead: (id: string) => canRes(P.TOOL_TRIGGER_READ, id),
/**
* 工作空间「工具」创建触发器权限
*/
triggerCreate: (id: string) => canRes(P.TOOL_TRIGGER_CREATE, id),
/**
* 工作空间「工具」编辑触发器权限
*/
triggerEdit: (id: string) => canRes(P.TOOL_TRIGGER_EDIT, id),
/**
* 工作空间「工具」删除触发器权限
*/
triggerDelete: (id: string) => canRes(P.TOOL_TRIGGER_DELETE, id),

// —— 文件夹 ——
/**
* 工作空间「工具」文件夹创建权限
*/
folderCreate: (id: string) => canRes(P.TOOL_FOLDER_CREATE, id),
/**
* 工作空间「工具」文件夹查看权限
*/
folderRead: (id: string) => canRes(P.TOOL_FOLDER_READ, id),
/**
* 工作空间「工具」文件夹编辑权限
*/
folderEdit: (id: string) => canRes(P.TOOL_FOLDER_EDIT, id),
/**
* 工作空间「工具」文件夹删除权限
*/
folderDelete: (id: string) => canRes(P.TOOL_FOLDER_DELETE, id),
/**
* 工作空间「工具」文件夹资源授权权限
*/
folderAuth: (id: string) => canRes(P.TOOL_FOLDER_AUTH, id),
folderManage: () => true,
}
Expand Down
17 changes: 9 additions & 8 deletions ui/src/views/system/resource-management/tool/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
RelatedResourcesToolAction,
TriggerToolAction,
} from '@/views/tool/tool-card/action-dropdown'
import perm from '@/permission'

const { auth } = useStore()
const router = useRouter()
Expand Down Expand Up @@ -177,10 +178,10 @@ onMounted(() => {
<template #default="{ row }">
<div class="flex-align-center">
<!-- 启用或禁用工具 -->
<ToolStatusSwitch v-model:loading="operationLoading" :api="SystemToolApi" :tool="row" @update="handleToolUpdate" />
<ToolStatusSwitch v-model:loading="operationLoading" :api="SystemToolApi" :tool="row" :disabled="!perm.tool.system.edit() || operationLoading" @update="handleToolUpdate" />
<el-divider direction="vertical" class="ml-3! mr-2!" />
<!-- 编辑工具配置 -->
<EditToolAction display="button" label="编辑" :api="SystemToolApi" :tool="row" @update="handleToolUpdate" />
<EditToolAction v-if="perm.tool.system.edit()" display="button" label="编辑" :api="SystemToolApi" :tool="row" @update="handleToolUpdate" />
<!-- 更多工具操作 -->
<MkTableMoreDropdown>
<!-- 打开工具工作流 -->
Expand All @@ -199,7 +200,7 @@ onMounted(() => {
/>

<!-- 资源授权 -->
<AuthorizeToolAction label="资源授权" :tool="row" />
<AuthorizeToolAction v-if="perm.tool.system.auth()" label="资源授权" :tool="row" />
<!-- 查看 MCP 配置 -->
<McpConfigAction
v-if="row.tool_type === TOOL_TYPE.MCP"
Expand All @@ -212,24 +213,24 @@ onMounted(() => {
<TriggerToolAction
:tool-api="SystemToolApi"
:tool-workflow-api="SystemToolWorkflowApi"
v-if="[TOOL_TYPE.CUSTOM, TOOL_TYPE.WORKFLOW].includes(row.tool_type)"
v-if="[TOOL_TYPE.CUSTOM, TOOL_TYPE.WORKFLOW].includes(row.tool_type) && perm.tool.system.triggerRead()"
label="触发器"
:api="SystemResourceTriggerApi"
:tool="row"
/>
<!-- 查看关联资源 -->
<RelatedResourcesToolAction label="查看关联资源" :api="SystemRelatedResourcesApi" :tool="row" />
<RelatedResourcesToolAction v-if="perm.tool.system.relateMap()" label="查看关联资源" :api="SystemRelatedResourcesApi" :tool="row" />
<!-- 查看执行记录 -->
<ExecutionRecordToolAction
v-if="[TOOL_TYPE.CUSTOM, TOOL_TYPE.WORKFLOW].includes(row.tool_type)"
v-if="[TOOL_TYPE.CUSTOM, TOOL_TYPE.WORKFLOW].includes(row.tool_type) && perm.tool.system.record()"
label="查看执行记录"
:api="SystemToolWorkflowApi"
:tool="row"
/>
<!-- 导出工具 -->
<ExportToolAction v-if="!row.template_id" v-model:loading="operationLoading" label="导出" :api="SystemToolApi" :tool="row" />
<ExportToolAction v-if="!row.template_id && perm.tool.system.export()" v-model:loading="operationLoading" label="导出" :api="SystemToolApi" :tool="row" />
<!-- 删除工具 -->
<MkDropdownItem divided @click="handleDeleteTool(row)">
<MkDropdownItem divided @click="handleDeleteTool(row)" v-if="perm.tool.system.delete()">
<template #icon><MkIcon name="icon_delete-trash_outlined" /></template>
删除
</MkDropdownItem>
Expand Down
22 changes: 12 additions & 10 deletions ui/src/views/tool/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import {
} from './tool-card/action-dropdown'
import ButtonCreateTool from './components/ButtonCreateTool.vue'
import ButtonToolStore from './components/ButtonToolStore.vue'
import perm from '@/permission/index.ts'

/* 当前文件夹 */

Expand Down Expand Up @@ -242,7 +243,7 @@ onMounted(() => {
<!-- 工具商店 -->
<ButtonToolStore :folder-id="currentFolder.id" @refresh="refreshTool" />
<!-- 创建 -->
<ButtonCreateTool :folder-id="currentFolder.id" :api="ToolApi" @refresh="refreshTool" />
<ButtonCreateTool v-if="perm.tool.workspace.create()" :folder-id="currentFolder.id" :api="ToolApi" @refresh="refreshTool" />
</template>
</template>
</div>
Expand All @@ -265,12 +266,13 @@ onMounted(() => {
>
<template #actions>
<!-- 修改工具状态 -->
<ToolStatusSwitch v-model:loading="toolOperationLoading" :api="ToolApi" :tool="tool" @update="handleToolUpdate" />
<ToolStatusSwitch :disabled="!perm.tool.workspace.edit(tool.id)" v-model:loading="toolOperationLoading" :api="ToolApi" :tool="tool" @update="handleToolUpdate" />
<el-divider direction="vertical" class="ml-1!"/>
</template>
<template #action-dropdown>
<!-- 编辑工具 -->
<EditToolAction
v-if="perm.tool.workspace.edit(tool.id)"
:ref="
(instance) => {
if (instance) editToolActionRefs[tool.id] = instance as InstanceType<typeof EditToolAction>
Expand Down Expand Up @@ -301,21 +303,21 @@ onMounted(() => {
:tool="tool"
/>
<!-- 资源授权 -->
<AuthorizeToolAction label="资源授权" :tool="tool" />
<AuthorizeToolAction v-if="perm.tool.workspace.auth(tool.id)" label="资源授权" :tool="tool" />

<!-- 工具触发器 -->
<TriggerToolAction
v-if="tool.tool_type === TOOL_TYPE.CUSTOM || tool.tool_type === TOOL_TYPE.WORKFLOW"
v-if="(tool.tool_type === TOOL_TYPE.CUSTOM || tool.tool_type === TOOL_TYPE.WORKFLOW) && perm.tool.workspace.triggerRead(tool.id)"
label="触发器"
:api="ResourceTriggerApi"
:tool="tool"
/>
<!-- 查看关联资源 -->
<RelatedResourcesToolAction label="查看关联资源" :api="RelatedResourcesApi" :tool="tool" />
<RelatedResourcesToolAction v-if="perm.tool.workspace.relateMap(tool.id)" label="查看关联资源" :api="RelatedResourcesApi" :tool="tool" />

<!-- 查看执行记录 -->
<ExecutionRecordToolAction
v-if="tool.tool_type === TOOL_TYPE.CUSTOM || tool.tool_type === TOOL_TYPE.WORKFLOW"
v-if="(tool.tool_type === TOOL_TYPE.CUSTOM || tool.tool_type === TOOL_TYPE.WORKFLOW) && perm.tool.workspace.record(tool.id)"
label="查看执行记录"
:api="WorkflowApi"
:tool="tool"
Expand All @@ -330,9 +332,9 @@ onMounted(() => {
@delete="handleDeleteTool"
/>
<!-- 导出 -->
<ExportToolAction v-if="!tool.template_id" v-model:loading="toolOperationLoading" label="导出" :api="ToolApi" :tool="tool" />
<ExportToolAction v-if="!tool.template_id && perm.tool.workspace.export(tool.id)" v-model:loading="toolOperationLoading" label="导出" :api="ToolApi" :tool="tool" />
<!-- 删除 -->
<DeleteToolAction v-model:loading="toolOperationLoading" label="删除" :api="ToolApi" :tool="tool" @delete="handleDeleteTool" />
<DeleteToolAction v-if="perm.tool.workspace.delete(tool.id)" v-model:loading="toolOperationLoading" label="删除" :api="ToolApi" :tool="tool" @delete="handleDeleteTool" />
</template>
</ToolCard>
</template>
Expand All @@ -351,8 +353,8 @@ onMounted(() => {
@batch-cancel="cancelBatchSelection"
>
<template #footer-batch-actions>
<el-button type="primary" plain :disabled="!selectedToolCount" @click="handleOpenBatchMove">移动到</el-button>
<el-button type="danger" plain :disabled="!selectedToolCount" @click="handleBatchDelete">删除</el-button>
<el-button v-if="perm.tool.workspace.batchMove()" type="primary" plain :disabled="!selectedToolCount" @click="handleOpenBatchMove">移动到</el-button>
<el-button v-if="perm.tool.workspace.batchDelete()" type="danger" plain :disabled="!selectedToolCount" @click="handleBatchDelete">删除</el-button>
</template>
</component>
</template>
Expand Down
Loading