SpringBoot3+Vue3+OnlyOffice 项目文档协同:folder schema、ACL 与云盘分轨怎么配
SpringBoot3Vue3OnlyOffice 项目文档协同folder schema、ACL 与云盘分轨怎么配文档地址https://ruoyioffice.com源码1·GitHubhttps://github.com/yuqing2026/ruoyi-office源码2·GitCodehttps://gitcode.com/zhouzhongyan/ruoyi-office源码3·Giteehttps://gitee.com/yqzy1688/ruoyi-office微信17156169080备注「RuoYi Office」立项合同在审批附件里周报在任务评论图纸在某个人的网盘。验收那天谁也拼不出完整资料袋。RuoYi Office 把项目资料做成一棵属于项目的树类型配置先预制目录过程单据自动归夹ACL 三档决定谁能打开 OnlyOffice。它不是 OA 云盘换皮。▲ 项目资料里点开 docx右边就是 WPS 文字窗口在改正文后台走 OnlyOffice不进个人网盘引言过程附件为什么不能进个人云盘OA 云盘解决「公司文件打开即编」。项目现场要的是另一件事这份 Word 属于哪个项目、该进哪一层目录、任务关闭后还能不能找到。现场说法如果只靠云盘「图纸在老王收藏夹」老王离职收藏夹权限一起走「立项扫描件在审批附件」台账详情打不开验收要翻流程「改个目录名历史文件全乱」没有系统夹/类型夹全是手工文件夹「外包能看不能改正文」分享三档对不上项目角色一句话云盘按人/组织分享项目资料按项目空间 过程来源 ACL。OnlyOffice 只是打开方式不是归属。技术栈锚点Spring Boot 3.5 Vue3 Vben OnlyOffice。下文写类名和方法。一、先选入口三页不要配成同一件事页面路由配什么项目类型配置/project/base-config/type-configfolder schema、自定义字段实施时配一次项目文档中心 · 查询统计/project/project-document跨项目检索、来源分布项目文档中心 · 文档管理同上先选项目再切 Tab本项目树、上传、ACL、打开编辑台账详情 · 项目文档/project/project-ledger-detail?id同一套 DocumentLibrary能力包关掉则 Tab 不出现独立编辑页/project/document-editor?ideditable1隐藏路由OnlyOffice 画布菜单在「项目 → 项目文档」「项目 → 基础配置 → 项目类型配置」。台账详情的资料库 Tab 才是日常办理页。▲/project/base-config/type-config打开类型表单。目录名称可加子目录深度锁在 3。这是预制不是运行时随手建夹二、folder schema类型先画树立项再 syncFolderSchemaEditor是递归组件一层一个名称点「添加子目录」才下钻depth 3才显示按钮。存进ProjectTypeConfigDO.folderSchema。立项或首次打开资料库时ProjectDocumentServiceImpl.ensureSpace做三件事没有根节点就建根名称用项目名。固定插入系统夹立项资料、变更资料、验收资料、未归类。读类型配置把 schema 落成folderKindtype的夹。privatevoidsyncTypeFolders(LongprojectId){ProjectDocumentDOrootdocumentMapper.selectRoot(projectId);ProjectLedgerDOledgerledgerMapper.selectById(projectId);if(rootnull||ledgernull||ledger.getProjectType()null){return;}ProjectTypeConfigDOconfigprojectTypeConfigService.getTypeConfigByType(ledger.getProjectType());if(confignull||CollUtil.isEmpty(config.getFolderSchema())){return;}intsort32;for(ProjectTypeFolderNodenode:coerceFolderSchema(config.getFolderSchema())){applyTypeFolder(projectId,root.getId(),node,sort,1);sort1;}}applyTypeFolder按名称找子夹没有才 insert深度超过 3 直接 return。改类型 schema不会删已经有文件的夹只补缺失节点。实施可以后补「设计图纸 / 会议纪要」已传文件还在原夹。阶段任务taskType1另走syncPhaseFolders。阶段改名会改夹名阶段删除时孩子被挪到「未归类」夹本身删除。不要手删系统夹去「整理界面」。夹种类folderKind谁创建能不能删根rootensureSpace否立项 / 变更 / 验收 / 未归类apply / change / acceptance / uncategorizedensureSpace否阶段phase同步阶段任务随阶段删孩子进未归类类型预制typesyncTypeFolders不随 schema 自动删手建custom有管理权的人可以三、多来源归集过程件进树不要再传一遍ProjectDocumentSourceType把来源写成六种upload资料库上传task任务execution执行progress进度apply立项change变更。后五种isProcesstrue。立项/变更审批通过后indexBillAttachments把单据附件索引进对应系统夹。任务、执行、进度各自挂钩taskId/executionId。文档中心的「查询」Tab 按来源、分类、文件名搜「资料库」Tab 才是树。▲/project/project-document的「查询统计」来源分布 文件表。这是唯一列表形态树在「文档管理」Tab分类字典project_doc_category资料 / 图纸 / 规范 / 会议 / 报表 / 其他。分类是检索标签不能替代 folder schema。图纸既要进「设计图纸」夹也可以打drawing标签。单文件上限 100MB。超了在insertFile抛业务异常不要靠浏览器卡死当门禁。四、ACL 三档角色默认值显式授权才能收紧权限枚举只有三档不要发明第四档「可下载不可看」permission名称能做什么0仅查看预览、下载、打印1可编辑替换源文件、打开 OnlyOffice 编辑2可管理建夹、改 ACL、删系统夹除外resolvePermission先确认你是项目成员、PMO 或管理员再取角色默认值和ACL 行的较大值。文件夹若被标成受限visibility1或祖先受限非管理员只认 ACL角色默认值作废。只读项目再min到查看。privateintresolvePermission(ProjectDocumentDOdoc,AccessContextctx){if(!ctx.member!ctx.pmo!ctx.manager){returnNONE;}booleanrestrictedisRestricted(doc,ctx);intaclresolveAclPermission(doc,ctx);introleDefaultctx.manager?MANAGE.getPermission():roleDefaultPermission(ctx.roleType,doc,ctx);inteffectiveMath.max(roleDefault,acl);if(restricted!ctx.manager){effectiveacl;}if(ctx.readonly){effectiveMath.min(effective,VIEW.getPermission());}returneffective;}角色默认值项目经理管理、技术成员编辑、普通成员仅自己上传的能编、观察者查看。PMO 但不是成员时默认查看。ACL 主体三种0用户、1部门、2岗位。给用户授权时对方必须已是项目成员否则PROJECT_DOCUMENT_ACL_NOT_MEMBER。inheritPermission默认 true子节点向上走最多 30 层祖先行若关掉继承就跳过。saveAcl只有当前有效权限 ≥ 管理才能写。写完会markRestricted避免「配了外包查看角色默认值又把编辑加回来」。▲ 先选项目再切「文档管理」。树是系统夹 类型夹有管理权才能开权限。台账详情同名 Tab 受能力包控制文档中心这条更稳部门可见deptVisible1时非管理员还必须在上传部门的组织线上否则直接 NONE。它和 ACL 是两道门不要只配一道。五、OnlyOffice 分轨bizType 不是云盘独立页/project/document-editor在core.ts里注册为隐藏路由不进菜单。ProjectDocumentOnlyOfficeServiceImpl.BIZ_TYPE project_document。下载和回调都挂/admin-api/project/document/onlyoffice/*。打开前先checkPermission。历史版本强制editablefalse。扩展名不在可编名单就抛「类型不支持」不要把 PDF 当 Word 打开。booleancanEdit!historyVieweditableProjectDocumentAclPermissionEnum.canOnlineEdit(permission)FileOnlineEditUtils.isEditableExtension(StrUtil.blankToDefault(doc.getFileExt(),doc.getFileName()));documentKey 用project_document 文档id 版本 fileUrl 本次 openId做种子避免和 OA 云盘同一文件 URL 抢同一把 key。回调回写走updateFileUrlAfterEdit归档件直接 return不会覆盖。不要这样配后果把项目 Word 丢进 OA 云盘再分享ACL 与项目角色脱节验收搜不到来源用云盘 JWT 调项目回调bizType 对不上回写落空观察者角色却指望打开即编默认只有查看要显式 ACL1把编辑页当菜单项没有项目上下文树和权限都丢云盘文讲 documentKey、双 JWT、forcesave。本文只要求你记住项目资料的打开即编认资料库 ACL认project_document。▲/project/document-editor?ideditable1。画布是 Word/Excel不是资料树。未启文档服务器或无 docx 时会失败不要用云盘编辑器充数六、设计决策为什么不复用云盘目录决策点方案理由空间粒度一项目一棵树验收、权限、检索都以项目为界目录从哪来系统夹 类型 schema 阶段实施配类型业务少手建过程件索引进树不复制二进制审批附件和资料库同一 URL权限角色默认 ∪ ACL受限则只认 ACL外包目录必须收得住在线编独立 bizType和云盘版本链、组织分享隔离阶段删除孩子进未归类不丢文件不留空阶段夹前端按钮看canEdit/canDelete。归档后两者都假。系统夹即使你是管理者也不能删。七、核心实现再拆两刀7.1 首次进入一定先 ensureSpace文档中心和台账资料库打开时都会确保空间存在。只调上传、不调 ensure会把文件插到不存在的 parent。类型后补 schema下一次进入会syncTypeFolders补夹不必重建项目。7.2 替换源文件也要编辑权replaceSource与在线编辑同一档权限。有人用「重新上传」绕过 OnlyOffice权限门必须同一把。所有者在非受限树上可以编辑自己的文件但不能改 ACL。7.3 查询 Tab 与资料库 Tab查询面向「文件名 / 来源 / 分类」扁平检索适合找某张扫描件。资料库面向树和权限。实施培训时先带人走类型配置 → 台账资料库再教跨项目检索。不要把查询结果当权限模型讲。八、数据结构够用即可主表project_document项目、父节点、节点类型夹/文件、folderKind、来源、版本号、归档、可见性、部门可见。ACL 表project_document_acldocumentId、targetType、targetId、permission、inheritPermission。版本表只服务历史预览不改当前指针——和云盘「恢复即新版本」是不同模块不要混引用。类型配置folderSchema是 JSON 数组节点只有namechildren。不要在 schema 里写权限权限永远落在运行时树上。九、技术亮点要点实现价值类型预制目录folderSchema ≤3 层sync 补齐同类项目资料袋长一样系统夹不可删ROOT/APPLY/CHANGE/…验收路径稳定过程件索引sourceType sourceId审批附件和树能对上阶段删不丢文件孩子进未归类改 WBS 不怕丢图纸角色 ∪ ACLmax受限只认 ACL外包目录可收紧ACL 继承向上 30 层可关 inherit少配叶子OnlyOffice 分轨bizTypeproject_document不和云盘抢 key独立编辑路由/project/document-editor画布全屏树还在台账十、快速体验在线演示https://ruoyioffice.com/web/账号 admin / admin123项目 → 基础配置 → 项目类型配置打开一个类型看 folder schema 是否已有两层目录。项目 → 项目台账进详情切到资料库核对系统夹和类型夹是否都在。对「设计图纸」一类夹打开权限看三档和继承勾选。点一份 docx「在线编辑」应进/project/document-editor不要跳到云盘。回到项目 → 项目文档用文件名搜确认来源列能区分上传和立项。源码仓库GitHubhttps://github.com/yuqing2026/ruoyi-office GitCodehttps://gitcode.com/zhouzhongyan/ruoyi-office Giteehttps://gitee.com/yqzy1688/ruoyi-office本地后端单体启动模块默认 48080前端pnpm dev:antdOnlyOffice 按基础设施在线文档配置启用。没启文档服务器时资料树和 ACL 仍可配只是编辑页会失败。常见问题FAQ项目文档和 OA 云盘哪个用来改合同正文公司制度、模板、跨项目制度进云盘。属于某个项目的过程件进项目资料库。合同模块还有自己的起草/模板链。三套不要互相当备份盘。folder schema 改了已经开工的项目会怎样下次ensureSpace/syncTypeFolders只补缺失夹不删已有夹也不搬已有文件。改名不会自动重命名运行时夹要在资料树里手工处理。观察者为什么打不开「编辑」角色默认是查看。要编辑必须 ACL≥1且文件未归档、扩展名可编。只把云盘分享开成「可编辑」对项目树无效。立项附件为什么资料库看不见看流程有没有走到会调用indexBillAttachments的节点以及项目是否已 ensureSpace。附件还在审批单上只是没索引进树。PMO 能改 ACL 吗仅 PMO、不是成员、也不是管理员时默认查看。要管理目录进项目成员并给经理角色或对那一夹显式 ACL2。结语项目文档协同要配的不是「再接一个在线编辑器」而是三件事选对类型 schema 决定资料袋长什么样来源索引决定过程件去哪一夹ACL 三档决定谁能打开 OnlyOffice。云盘继续管组织文件。两套 bizType两套权限不要图省事并成一个网盘。读者能带走的三句目录在类型上配过程件靠索引打开即编认资料库 ACL。你们现在验收找图纸是进项目树还是问「谁电脑上有」评论区对照一下。相关阅读同目录企业云盘全景讲组织分享与版本甘特图文讲任务条不讲资料树。那些文章不替代本页的 folder schema。想要体验 RuoYi Office 的强大功能在线演示https://ruoyioffice.com/web/账号 admin / admin123源码仓库GitHubhttps://github.com/yuqing2026/ruoyi-office GitCodehttps://gitcode.com/zhouzhongyan/ruoyi-office Giteehttps://gitee.com/yqzy1688/ruoyi-office技术咨询添加微信17156169080备注「RuoYi Office」⭐如果觉得不错请给个 Star 支持一下