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

Strapi中如何实现用户仅操作自身创建的Blog权限?

Strapi实现Blog数据的专属权限控制(仅创建者可操作自身内容)

一、先确保Blog模型关联创建用户

Strapi默认会给内容类型自带createdBy关联字段(关联到User模型),如果你的Blog模型没启用这个字段,手动配置:

  • 后台进入Content-Types Builder,打开Blog模型
  • 添加Relation类型字段,关联User模型,关系选「Many to One」,字段名设为createdBy,勾选必填项
  • 保存后重启Strapi生效

二、配置角色权限

进入后台Settings > Roles & Permissions,针对不同角色配置规则:

1. 登录用户(Authenticated角色)

这是核心配置,确保登录用户只能操作自己创建的Blog:

  • CREATE权限:保持启用即可,Strapi会自动把当前登录用户设为新Blog的createdBy
  • READ(find/findOne)、UPDATE、DELETE权限:
    点击权限右侧的齿轮图标进入设置,在Condition栏输入过滤规则:
    { createdBy: { id: $currentUser.id } }
    
    保存后,该角色用户只能查询、修改、删除自己创建的Blog。

2. 公共用户(Public角色,可选)

如果需要保留「所有用户可查看全体Blog」的原有逻辑:

  • 给Public角色只保留Blog的find和findOne权限,关闭CREATE、UPDATE、DELETE权限,且不需要加过滤条件。如果不需要公共查看,直接关闭所有Blog权限即可。

三、验证效果

  • 用用户A登录创建Blog,系统自动关联createdBy为用户A
  • 切换到用户B登录,尝试访问用户A的Blog,会返回403权限错误;用户B只能操作自己创建的内容
  • 用户A可正常查看、修改、删除自己的所有Blog

四、自定义代码场景补充(如果用了自定义控制器)

如果你写了自定义的Blog控制器方法,需要手动加入权限过滤逻辑,比如:

// ./api/blog/controllers/blog.js
async find(ctx) {
  const currentUser = ctx.state.user;
  // 未登录用户返回所有Blog(如果需要公共查看),否则只返回自己的
  const query = currentUser ? { createdBy: currentUser.id } : {};
  return await strapi.services.blog.find(query);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:23:12