ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

NocoBase 文件管理权限详解:4 步配置外部存储,管住谁能上传、谁能看文件

NocoBase 文件管理权限详解:4 步配置外部存储,管住谁能上传、谁能看文件 NocoBase 文件管理权限详解4 步配置外部存储管住谁能上传、谁能看文件【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase如果你的业务里用户上传的附件不只是几张图片而是合同、报价单这类给错人看就有麻烦的文件那么能不能传只是第一道门传完之后谁有资格下载才是 NocoBase 文件权限控制真正要回答的问题。作为开源的 AI 无代码平台NocoBase 把文件管理拆成了存储引擎、文件表、权限策略三层理解这三层之后从本地磁盘到 OSS、S3 这类外部存储的权限配置其实都有迹可循。为什么无代码平台也要专门管文件权限先想一个具体场景你搭了一个客户管理表里面挂了合同附件字段。默认情况下任何登录用户都能上传听起来没问题但接下来会发生三件你没预期的事上传动作本身没有校验文件类型有人顺手传了一个可执行文件文件一旦上传任何知道地址的人都能直接通过 URL 下载和谁能看这条客户记录完全是两码事删除客户记录时磁盘上的文件也被一起删了想找回已经来不及。这三件事分别对应文件管理器的三类控制手段上传规则文件类型、大小、访问地址的生成方式、以及记录删除时的文件保留策略。下面一层层拆开看。动手前先分清三个角色存储引擎、文件表、权限规则NocoBase 的文件管理器插件packages/plugins/nocobase/plugin-file-manager/在系统里同时维护了两张核心数据表存储引擎表storages。每一行就是一个文件往哪儿放的配置类型是本地磁盘、阿里云 OSS、亚马逊 S3 还是腾讯云 COS分别实现在 storages/local.ts、storages/s3.ts 等文件中。它还记录了一组权限相关的参数访问 URL 前缀、存储相对路径、文件大小限制、文件类型规则以及是否默认引擎删记录时是否保留文件两个开关。文件表attachments 及其同类表。文件本体存在存储引擎里但每个文件的元信息文件名、扩展名、体积、MIME 类型、访问地址是文件表里的一条记录。附件字段本质上就是一个指向文件表的关联字段权限规则ACL。NocoBase 的 ACL 是一套资源 操作 角色的访问控制机制文件管理器在加载时往里注册了几条默认规则下一节细讲这些规则决定了哪些角色能上传、哪些操作会被强制收窄到自己的文件。分清这三个角色后你会发现所谓外部存储权限控制其实就是给存储引擎表配参数、给文件表配角色、再让 ACL 规则兜底。上手配置一个外部存储引擎的 4 个关键参数插件启用后系统会自动创建一个本地存储引擎你可以直接拿来用要接外部存储则在文件存储引擎管理页新建一条记录。不管选哪种引擎有 4 个参数和你最关心访问 URL 基础baseUrl。文件最终访问地址的前缀可以填 CDN 域名这样所有文件走 CDN 分发原存储桶可以不对外直接暴露。路径path。文件写入存储引擎时的相对目录比如user/avatar上传后的地址会拼成访问URL基础/路径/文件名。文件大小限制。默认 20MB最大可调整到 1GB超过限制的文件会被拒绝上传。文件类型。用 MIME 语法MIME 类型是浏览器和服务器用来识别文件格式的标签如image/png描述允许的类型多个类型用英文逗号分隔。此外还有两个容易忽略但权限上很关键的开关默认存储引擎附件字段没指定引擎时文件一律进默认引擎且默认引擎被禁止删除和删除记录时保留文件勾选后文件表记录被删引擎里的实体文件仍保留适合有审计或找回需求的场景。各引擎的完整参数说明见官方文档 文件存储引擎。上传限制怎么配文件类型与大小规则的底层逻辑第 3 步里的文件类型参数落到代码里就是一组上传前校验规则存放在每个存储引擎的rules字段中。目前内置的规则是 MIME 类型匹配rules/mimetype.ts不填或填*表示不限制什么类型都放行填image/*只允许图片类文件填image/*, application/pdf图片加 PDF 都放行。注意这条规则校验的是服务器识别出的 MIME 类型。它拦得住故意传 exe的大白兔但拦不住把恶意内容改后缀名的老手——所以对真正敏感的业务建议再叠一层只允许登录用户 文件走私有访问的限制见下节而不是只依赖类型白名单。文件管理器内置的 4 条权限规则知道它们少踩坑翻一下插件的服务端代码server/server.tsNocoBase 在插件加载时就写死了四条默认规则理解它们能帮你判断为什么我的用户做不了某件事只有登录用户能上传。attachments资源的upload、create操作只开放给loggedIn角色匿名访问直接被拒。用户只能动自己上传的文件。文件表的create、update、destroy操作会被自动注入一个过滤条件createdById必须等于当前登录用户。也就是说没有额外授权时普通用户改不了、也删不掉别人传的文件。文件表的列表接口默认关闭。attachments资源的list操作被直接替换为 404 响应——这堵住了登录用户批量拉取全量文件清单再挑着下载的旁路。要开放列表需要你在 ACL 里显式授权并想清楚对哪些角色开放。默认存储引擎不可删除。删除storages时系统自动附加过滤条件排除默认引擎另外被文件表引用的引擎也会被拒绝删除防止引擎没了文件成孤儿。管理权限也被单独打包storages:*全部操作注册成了一个独立权限片段你只需要把这一个片段授给管理员角色就能一次性管住存储引擎的新建、修改、删除不必逐个操作勾选。进阶给敏感文件再加三道保险内置规则解决了默认安全如果你的场景涉及合同、证件这类文件建议再加三道私有访问。内置的四种引擎默认对外是公开可读的文件地址一旦泄露任何人都能下载。对敏感文件把存储桶设为私有如 OSS/S3 的私有读写权限配合 baseUrl 走服务端签名或反向代理鉴权让拿到地址不等于拿得到文件。删记录不删文件paranoid。前面提到的删除记录时保留文件开关配合定期人工清理策略既避免误删又留下追溯窗口。定期审计。文件表自带createdBy、updatedBy字段谁传的、谁改的都有记录再结合系统日志可以定期核对哪些文件被访问、被谁关联到了哪条业务记录。另外提醒一点外部存储的密钥AccessKey 等都写在存储引擎的配置项里这条记录只有管理员角色可见可改请确认你的管理员账号范围足够小。参考官方文档文件管理器概述官方文档文件存储引擎与通用参数插件源码plugin-file-manager【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表