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栏输入过滤规则:
保存后,该角色用户只能查询、修改、删除自己创建的Blog。{ createdBy: { id: $currentUser.id } }
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
相关产品推荐
相关产品推荐

