You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Strapi 5 文件授权管理:限制用户仅关联自身创建的条目

解决方案:扩展Upload插件实现权限校验

你需要扩展upload插件来实现这个需求,Strapi默认的权限系统无法直接完成这种基于条目作者的关联限制,以下是具体实现步骤:

核心思路

重写Upload插件中处理文件与条目关联的控制器方法,在执行关联操作前校验当前用户是否为目标条目的创建者(通过自定义的author字段判断),校验不通过则返回权限错误。

具体实现

  1. 在项目根目录创建扩展文件:src/extensions/upload/controllers/upload.js
  2. 写入以下代码,重写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:33:15