fix(file): 文件管理删除入口收敛为所有者/创建者,拦截只读用户

- file.vue:右键「删除」项及工具栏批量「删除」按钮对非所有者/创建者禁用,
  与后端 file/remove 的 permissionFind(...,1000) 规则对齐(修复只读用户可见可点删除入口)
- 同步 ai-kb:delete-restore chunk 更正前置权限为「所有者或创建者」并补只读无权限说明
This commit is contained in:
kuaifan 2026-06-27 03:11:01 +00:00
parent bc0fe9c748
commit eb672eaef1
2 changed files with 10 additions and 4 deletions

View File

@ -15,13 +15,14 @@ aliases:
related_tools: [list_files]
related_pages: [file]
prerequisites:
- 对要删除的文件有所有权或写权限
- 必须是该文件的所有者或创建者(仅这两类人可删除)
negative:
- 只读或仅可读写(非创建者)的共享成员无删除权限:删除入口在界面被禁用,后端 file/remove 也会拒绝并返回「仅限所有者或创建者操作」
- 文件删除采用软删除(数据库 soft delete但前端无回收站 UI普通用户无法自助恢复
- 一次最多删除 100 个文件 / 文件夹
- 删文件夹会级联删除其内所有文件与子文件夹
- 删除会同时清理共享配置FileUser和分享链接FileLink
last_verified: v1.7.90
last_verified: v1.8.45
---
# 删除文件或恢复文件

View File

@ -73,7 +73,7 @@
<span v-show="showBtnText">{{$L('打包下载')}}</span>
</div>
</Button>
<Button size="small" type="error" @click="deleteFile(selectedItems.map(({id}) => id))">
<Button size="small" type="error" :disabled="batchDeleteDisabled" @click="deleteFile(selectedItems.map(({id}) => id))">
<div class="tool-box">
<Icon type="ios-trash" />
<span v-show="showBtnText">{{$L('删除')}}</span>
@ -252,7 +252,7 @@
<DropdownItem name="download" :disabled="contextMenuItem.ext == '' || (contextMenuItem.userid != userId && contextMenuItem.permission == 0)">{{$L('下载')}}</DropdownItem>
<DropdownItem v-if="selectedItems.length > 1" name="downloadzip" :disabled="contextMenuItem.userid != userId && contextMenuItem.permission == 0">{{$L('打包下载')}}</DropdownItem>
<DropdownItem name="delete" divided style="color:red">{{$L('删除')}}</DropdownItem>
<DropdownItem name="delete" divided style="color:red" :disabled="contextMenuItem.userid != userId && contextMenuItem.created_id != userId">{{$L('删除')}}</DropdownItem>
</template>
<template v-else>
<DropdownItem
@ -973,6 +973,11 @@ export default {
return !!this.fileList?.find((res) => res._checked && res.permission < 1)
},
batchDeleteDisabled() {
// file/remove getPermission 1000
return !!this.fileList?.find((res) => res._checked && res.userid != this.userId && res.created_id != this.userId)
},
maxSize() {
if(this.systemConfig?.file_upload_limit){
return this.systemConfig.file_upload_limit * 1024