NocoBase外部存储权限全链路讲解:谁能传、谁能看、在哪管
【免费下载链接】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 的文件管理器插件把本地磁盘、阿里 OSS、AWS S3、腾讯 COS 四类存储收进同一套权限规则里。读完这篇,你能配出上传文件类型白名单、大小上限,并知道如何在 ACL 面板里给不同角色分配文件访问权限。
一次真实事故:头像被当成跳板,合同图流到外网
客户在注册页传头像,结果有人把一张带脚本的 HTML 改后缀塞了进来;另一边,销售随手传的产品图被未登录的访客直接下载走了。两件事的根源是一样的:上传入口没有规则,访问链路没有分角色。下面讲的每个机制,都是在堵这两个洞。
30 秒看清支持什么:4 种引擎、3 层权限
| 维度 | 实际支持 |
|---|---|
| 存储引擎 | local、ali-oss、s3、tx-cos,在管理界面可并存多套 |
| 上传规则 | MIME 类型白名单、单文件大小上限(默认 20MB) |
| 权限粒度 | 未登录不能传;改/删只能操作自己的文件;存储配置本身也要走 ACL |
| 配置入口 | 文件管理器插件页(建存储、填规则)+ ACL 面板(发权限) |
三步配出第一套存储权限规则
- 启用插件,拿到默认存储:文件管理器首次安装时会自动创建一个默认的本地存储引擎,你不需要从零建配置。
- 在存储里填两条规则:进入管理界面的存储设置,给这套存储填 MIME 白名单(如
image/*, application/pdf)和大小上限,规则落在storages表的rules字段里,代码逻辑见 src/server/rules/。 - 回 ACL 面板发权限:给"外部访客"只留查看权,给"运营"加上传权,把存储管理的权限单独留给管理员角色。
谁 → 能做什么 → 在哪里控制:权限模型的三要素
上传链路可以想成写字楼的门禁:刷工牌(登录)才能进楼,但打印机只认你本人刷卡,机房钥匙则只有行政才有。对应到代码,三要素是这样的:
- 谁:登录用户(
loggedIn)是上传的最低门槛,未登录一律 403。 - 能做什么:上传、新建放开给登录用户;但更新和删除被强制加了一个过滤条件——只命中
createdById等于当前用户的记录。别人传的文件,你连改的机会都没有。 - 在哪里控制:角色级权限在 ACL 面板分配,文件级约束写在插件里,核心就是这几行注册逻辑:
this.app.acl.allow('attachments', ['upload', 'create'], 'loggedIn'); this.app.acl.addFixedParams('attachments', 'update', ownMerger); this.app.acl.addFixedParams('attachments', 'destroy', ownMerger);存储配置(storages:*)被注册为独立的 ACL 片段,意味着"谁能动存储"和"谁能传文件"是两条互不影响的线,默认引擎还有删除保护。
客户头像上传:只放图片,公开可看
头像场景要的是"门槛低但入口窄"。给这个字段单独建一套存储,规则里 MIME 只写image/*、大小限 2MB;ACL 上给普通注册用户开上传权即可。这套规则在上传瞬间校验,不合格直接返回 400,访客拿不到文件 URL 就下不走。
内部合同归档:只收 PDF,非管理员看不见
合同场景反过来——"门槛高、口子小"。新建一套私有存储,MIME 规则写死application/pdf,这样 HTML、XML、SVG 这类可执行内容的文件一律进不来;再在 ACL 里把文件查看权限只分配给法务和管理员角色。销售团队只保留上传和"查看自己上传的"权限,归档目录对其他角色彻底不可见。
上线前先看这 5 条
- MIME 校验读的是文件头魔数而不是后缀名,把
evil.html改名成a.png照样会被拒。 - 默认存储引擎和"被数据表引用的存储"都删不掉,系统在用前会拦下你,防止字段链接断裂。
- 不配 MIME 规则就是
*全放行,公网入口的存储别偷懒。 - 默认大小上限是 20MB,大文件场景记得显式调大,小图场景显式调小。
- 本地存储的路径有防穿越检查,但生产环境更建议用 OSS/S3 配 CDN,权限和带宽一起省心。
存储权限这件事,说到底就是"上传有闸、查看有门、配置有锁"三层,NocoBase 把三层都留了开关。现在就可以打开管理界面进文件管理器,往默认存储里传一张图片,再传一个.html试试——被拒的那一刻,你就知道规则生效了。
【免费下载链接】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),仅供参考