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

Strapi媒体库创作者权限问题:仅查看自身上传内容失效

Strapi媒体库实现作者仅查看自身上传文件的解决方案

直接修改数据库表admin_permissions和admin_permissions_role_links不是官方推荐的方式,不仅容易出错,重启后还可能被系统覆盖。以下是稳定可行的实现方案:

  • 自定义媒体库查询逻辑
    在项目的./src/api/upload/controllers/upload.js文件中(无则新建),重写查询方法,让普通作者只能看到自己上传的文件:

    'use strict';
    
    const { createCoreController } = require('@strapi/strapi').factories;
    
    module.exports = createCoreController('api::upload.upload', ({ strapi }) => ({
      // 重写列表查询
      async find(ctx) {
        // 超级管理员不受限制
        if (ctx.state.user.role.name === 'Super Admin') {
          return super.find(ctx);
        }
        // 给普通作者添加上传者过滤条件
        ctx.query.filters = {
          ...ctx.query.filters,
          uploadedBy: ctx.state.user.id
        };
        return super.find(ctx);
      },
    
      // 重写单个文件查询,防止通过ID直接访问他人文件
      async findOne(ctx) {
        const entity = await super.findOne(ctx);
        if (ctx.state.user.role.name !== 'Super Admin' && entity.data.attributes.uploadedBy.id !== ctx.state.user.id) {
          return ctx.forbidden('无权访问此文件');
        }
        return entity;
      }
    }));
    
  • 给媒体文件关联上传用户
    Strapi默认的Upload模型没有关联用户字段,需要修改./src/api/upload/models/upload.js添加关联:

    'use strict';
    
    module.exports = {
      attributes: {
        // 保留原有属性,新增上传者关联
        uploadedBy: {
          model: 'admin::user',
          required: false
        }
      }
    };
    

    执行strapi migrate命令更新数据库结构。

  • 自动绑定上传者信息
    在上传文件时自动把当前用户ID存入关联字段,继续在upload.js控制器中添加create方法重写:

    async create(ctx) {
      ctx.request.body.data = {
        ...ctx.request.body.data,
        uploadedBy: ctx.state.user.id
      };
      return super.create(ctx);
    }
    
  • 配置角色权限
    进入Strapi后台的角色管理,给作者角色配置Upload的权限:允许find、findOne、create操作,不要勾选全局的“查看所有”权限(如果有)。

  • 验证效果
    用作者账号上传文件后,切换另一个作者账号登录,媒体库应只显示自身上传的内容;超级管理员账号可查看所有文件。

内容的提问来源于stack exchange,提问作者Tomas Mezdej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:06:00