feat: Folder button permission (#3520)
Some checks are pending
sync2gitee / repo-sync (push) Waiting to run

Co-authored-by: zhangzhanwei <zhanwei.zhang@fit2cloud.com>
This commit is contained in:
shaohuzhang1 2025-07-08 21:03:38 +08:00 committed by GitHub
parent 49d40bb480
commit 1482d8674b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 179 additions and 16 deletions

View File

@ -57,12 +57,14 @@
<el-dropdown-menu>
<el-dropdown-item
@click.stop="openCreateFolder(data)"
v-if="node.level !== 3"
v-if="node.level !== 3 && permissionPrecise.folderCreate()"
>
<AppIcon iconName="app-add-folder"></AppIcon>
{{ $t('components.folder.addChildFolder') }}
</el-dropdown-item>
<el-dropdown-item @click.stop="openEditFolder(data)">
<el-dropdown-item @click.stop="openEditFolder(data)"
v-if="permissionPrecise.folderEdit()"
>
<el-icon><EditPen /></el-icon>
{{ $t('common.edit') }}
</el-dropdown-item>
@ -70,6 +72,7 @@
divided
@click.stop="deleteFolder(data)"
:disabled="!data.parent_id"
v-if="permissionPrecise.folderDelete()"
>
<el-icon><Delete /></el-icon>
{{ $t('common.delete') }}
@ -88,7 +91,7 @@
</template>
<script lang="ts" setup>
import { ref, watch } from 'vue'
import { computed, ref, watch } from 'vue'
import { onBeforeRouteLeave } from 'vue-router'
import type { TreeInstance } from 'element-plus'
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
@ -99,6 +102,7 @@ import { hasPermission } from '@/utils/permission/index'
import useStore from '@/stores'
import { TreeToFlatten } from '@/utils/array'
import { MsgConfirm } from '@/utils/message'
import permissionMap from '@/permission'
defineOptions({ name: 'FolderTree' })
const props = defineProps({
@ -131,6 +135,21 @@ const props = defineProps({
default: () => ({}),
},
})
const resourceType = computed(() => {
if (props.source === 'APPLICATION') {
return 'application'
} else if (props.source === 'KNOWLEDGE') {
return 'knowledge'
} else if (props.source === 'MODEL') {
return 'model'
} else if (props.source === 'TOOL') {
return 'tool'
}
})
const permissionPrecise = computed(() => {
return permissionMap[resourceType.value!]['workspace']
})
const { folder } = useStore()
onBeforeRouteLeave((to, from) => {

View File

@ -13,6 +13,16 @@ const workspace = {
],
'OR'
),
folderCreate: () =>
hasPermission(
[
RoleConst.USER.getWorkspaceRole,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.APPLICATION_CREATE.getWorkspacePermission,
PermissionConst.APPLICATION_CREATE.getWorkspacePermissionWorkspaceManageRole,
],
'OR'
),
edit: (source_id:string) =>
hasPermission(
[
@ -23,6 +33,16 @@ const workspace = {
],
'OR'
),
folderEdit: () =>
hasPermission(
[
RoleConst.USER.getWorkspaceRole,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.APPLICATION_EDIT.getWorkspacePermissionWorkspaceManageRole,
PermissionConst.APPLICATION_EDIT.getWorkspacePermission
],
'OR'
),
export: (source_id:string) =>
hasPermission(
[
@ -43,6 +63,16 @@ const workspace = {
],
'OR'
),
folderDelete: () =>
hasPermission(
[
RoleConst.USER.getWorkspaceRole,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.APPLICATION_DELETE.getWorkspacePermissionWorkspaceManageRole,
PermissionConst.APPLICATION_DELETE.getWorkspacePermission
],
'OR'
),
overview_embed: (source_id:string) =>
hasPermission(
[

View File

@ -16,7 +16,7 @@ const systemManage = {
sync: () => false,
vector: () => false,
generate: () => false,
setting: () => false,
edit: () => false,
export: () => false,
delete: () => false,
@ -35,6 +35,10 @@ const systemManage = {
problem_create: () => false,
problem_relate: () => false,
problem_delete: () => false,
folderCreate: () => false,
folderEdit: () => false,
folderDelete: () => false,
}
export default systemManage

View File

@ -35,7 +35,7 @@ const share = {
],
'OR'
),
setting: () =>
edit: () =>
hasPermission (
[
RoleConst.ADMIN,
@ -165,6 +165,8 @@ const share = {
],
'OR'
),
folderCreate: () => false,
folderEdit: () => false,
folderDelete: () => false,
}
export default share

View File

@ -7,7 +7,7 @@ const workspaceShare = {
sync: () => false,
vector: () => false,
generate: () => false,
setting: () => false,
edit: () => false,
export: () => false,
delete: () => false,
@ -26,6 +26,10 @@ const workspaceShare = {
problem_create: () => false,
problem_relate: () => false,
problem_delete: () => false,
folderCreate: () => false,
folderEdit: () => false,
folderDelete: () => false,
}
export default workspaceShare
export default workspaceShare

View File

@ -20,6 +20,16 @@ const workspace = {
],
'OR',
),
folderCreate: () =>
hasPermission(
[
RoleConst.USER.getWorkspaceRole,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.KNOWLEDGE_CREATE.getWorkspacePermission,
PermissionConst.KNOWLEDGE_CREATE.getWorkspacePermissionWorkspaceManageRole,
],
'OR',
),
sync: (source_id:string) =>
hasPermission(
[
@ -50,7 +60,7 @@ const workspace = {
],
'OR',
),
setting: (source_id:string) =>
edit: (source_id:string) =>
hasPermission(
[
new ComplexPermission([RoleConst.USER],[PermissionConst.KNOWLEDGE.getKnowledgeWorkspaceResourcePermission(source_id)],[],'AND'),
@ -60,6 +70,16 @@ const workspace = {
],
'OR',
),
folderEdit: () =>
hasPermission(
[
RoleConst.USER.getWorkspaceRole,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermission,
PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermissionWorkspaceManageRole,
],
'OR',
),
export: (source_id:string) =>
hasPermission(
[
@ -80,6 +100,16 @@ const workspace = {
],
'OR',
),
folderDelete: () =>
hasPermission(
[
RoleConst.USER.getWorkspaceRole,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.KNOWLEDGE_DELETE.getWorkspacePermission,
PermissionConst.KNOWLEDGE_DELETE.getWorkspacePermissionWorkspaceManageRole,
],
'OR',
),
doc_create: (source_id:string) =>
hasPermission(
[

View File

@ -12,10 +12,14 @@ const systemManage = {
),
'OR',
),
addModel: () => false,
create: () => false,
modify: () => false,
paramSetting: () => false,
delete: () => false,
folderCreate: () => false,
folderEdit: () => false,
folderDelete: () => false,
}
export default systemManage

View File

@ -3,7 +3,7 @@ import { ComplexPermission } from '@/utils/permission/type'
import { EditionConst, PermissionConst, RoleConst } from '@/utils/permission/data'
const share = {
is_share: () => false,
addModel: () =>
create: () =>
hasPermission(
[
RoleConst.ADMIN,
@ -35,5 +35,8 @@ const share = {
],
'OR',
),
folderCreate: () => false,
folderEdit: () => false,
folderDelete: () => false,
}
export default share

View File

@ -10,7 +10,17 @@ const workspace = {
[EditionConst.IS_EE],'OR'),
'OR',
),
addModel: () =>
create: () =>
hasPermission(
[
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.USER.getWorkspaceRole,
PermissionConst.MODEL_CREATE.getWorkspacePermission,
PermissionConst.MODEL_CREATE.getWorkspacePermissionWorkspaceManageRole
],
'OR'
),
folderCreate: () =>
hasPermission(
[
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
@ -30,6 +40,16 @@ const workspace = {
],
'OR'
),
folderEdit: () =>
hasPermission(
[
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.USER.getWorkspaceRole,
PermissionConst.MODEL_EDIT.getWorkspacePermission,
PermissionConst.MODEL_EDIT.getWorkspacePermissionWorkspaceManageRole
],
'OR'
),
paramSetting: (source_id:string) =>
hasPermission(
[
@ -50,6 +70,16 @@ const workspace = {
],
'OR'
),
folderDelete: () =>
hasPermission(
[
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.USER.getWorkspaceRole,
PermissionConst.MODEL_DELETE.getWorkspacePermission,
PermissionConst.MODEL_DELETE.getWorkspacePermissionWorkspaceManageRole
],
'OR'
),
}
export default workspace

View File

@ -20,6 +20,10 @@ const systemManage = {
export: () => false,
debug: () => false,
folderCreate: () => false,
folderEdit: () => false,
folderDelete: () => false,
}
export default systemManage

View File

@ -59,5 +59,9 @@ const share = {
],
'OR',
),
folderCreate: () => false,
folderEdit: () => false,
folderDelete: () => false,
}
export default share

View File

@ -10,7 +10,6 @@ const workspace = {
[EditionConst.IS_EE],'OR'),
'OR',
),
create: () =>
hasPermission(
[
@ -21,6 +20,16 @@ const workspace = {
],
'OR'
),
folderCreate: () =>
hasPermission(
[
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.USER.getWorkspaceRole,
PermissionConst.TOOL_CREATE.getWorkspacePermission,
PermissionConst.TOOL_CREATE.getWorkspacePermissionWorkspaceManageRole
],
'OR'
),
delete: (source_id:string) =>
hasPermission(
[
@ -31,6 +40,16 @@ const workspace = {
],
'OR',
),
folderDelete: () =>
hasPermission(
[
RoleConst.USER.getWorkspaceRole,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.TOOL_DELETE.getWorkspacePermission,
PermissionConst.TOOL_DELETE.getWorkspacePermissionWorkspaceManageRole
],
'OR',
),
switch: (source_id:string) =>
hasPermission(
[
@ -51,6 +70,16 @@ const workspace = {
],
'OR'
),
folderEdit: () =>
hasPermission(
[
RoleConst.USER.getWorkspaceRole,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.TOOL_EDIT.getWorkspacePermission,
PermissionConst.TOOL_EDIT.getWorkspacePermissionWorkspaceManageRole
],
'OR',
),
copy: (source_id:string) =>
hasPermission(
[

View File

@ -255,7 +255,7 @@
<el-dropdown-item
@click.stop="openMoveToDialog(item)"
v-if="permissionPrecise.setting(item.id) && apiType === 'workspace'"
v-if="permissionPrecise.edit(item.id) && apiType === 'workspace'"
>
<AppIcon iconName="app-migrate"></AppIcon>
{{ $t('common.moveTo') }}
@ -268,7 +268,7 @@
path: `/knowledge/${item.id}/${folder.currentFolder.id || 'shared'}/setting`,
})
"
v-if="permissionPrecise.setting(item.id)"
v-if="permissionPrecise.edit(item.id)"
>
{{ $t('common.setting') }}
</el-dropdown-item>

View File

@ -59,7 +59,7 @@
</el-select>
</div>
<el-button
v-if="!isShared && permissionPrecise.addModel()"
v-if="!isShared && permissionPrecise.create()"
class="ml-16"
type="primary"
@click="openCreateModel(active_provider)"