Strapi 5 文件授权管理:限制用户仅关联自身创建的条目
解决方案:扩展Upload插件实现权限校验
你需要扩展upload插件来实现这个需求,Strapi默认的权限系统无法直接完成这种基于条目作者的关联限制,以下是具体实现步骤:
核心思路
重写Upload插件中处理文件与条目关联的控制器方法,在执行关联操作前校验当前用户是否为目标条目的创建者(通过自定义的author字段判断),校验不通过则返回权限错误。
具体实现
- 在项目根目录创建扩展文件:
src/extensions/upload/controllers/upload.js - 写入以下代码,重写
link方法(对应文件关联的API端点):
const { createCoreController } = require('@strapi/strapi').factories; module.exports = createCoreController('plugin::upload.upload', ({ strapi }) => ({ async link(ctx) { // 获取当前登录用户 const currentUser = ctx.state.user; if (!currentUser) { return ctx.forbidden('未授权访问'); } // 提取请求中要关联的条目信息 const { refId, ref } = ctx.request.body; if (!refId || !ref) { return ctx.badRequest('缺少条目ID或内容类型参数'); } // 查询目标条目,验证作者是否为当前用户 const targetEntry = await strapi.query(ref).findOne({ where: { id: refId, author: currentUser.id }, }); if (!targetEntry) { return ctx.forbidden('仅可关联自己创建的条目'); } // 校验通过,执行原关联逻辑 return super.link(ctx); }, }));
补充说明
- 上述代码假设你的内容类型(如文章、产品等)已添加
author字段,且该字段关联到Strapi内置的user模型 - 如果你的业务场景中还存在其他文件关联入口(比如创建条目时直接上传关联),需要额外对应扩展目标内容类型的控制器(如
src/api/post/controllers/post.js),在创建/更新逻辑中添加类似的校验 - 修改后重启Strapi服务,新的权限逻辑即可生效
内容的提问来源于stack exchange,提问作者Artem
相关产品推荐
相关产品推荐

